首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在十六进制和复杂字符之间匹配数字的正则表达式

在十六进制和复杂字符之间匹配数字的正则表达式
EN

Stack Overflow用户
提问于 2020-10-31 05:43:19
回答 3查看 91关注 0票数 1

我引用了一段文字:

代码语言:javascript
复制
"Ngo&#-225;n:   8.40   Zữ kăn:   6.5   Kịch zuử:   0.0   Đoan l"&#-237;;:   5   GTBH:   6.50   KH: 6"

我想使用regex提取:之后的所有数字,比如在Python中:

代码语言:javascript
复制
"8.40           6.5         0.0        5           6.50            6"

你能告诉我如何处理这个任务吗?谢谢。

我只是更新一下我所做的事情:

代码语言:javascript
复制
(?<!\:)\d{1,2}\.?\d*?

使用Ngo&#-225;n: 8.40 Zữ kăn: 6.5 Kịch zuử: 0.0 Đoan l"&#-237;;: 5 GTBH: 6.50 KH: 6作为测试字符串。见这里的演示

此模式捕获十六进制值:225237。我们能修改一些东西来提取这些吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-31 10:33:55

您可以在下面的正则表达式中使用re.findall

代码语言:javascript
复制
:\s*([\d\.]+)

我还在Python上测试结果。

代码语言:javascript
复制
import re

string = "Ngo&#-225;n: 8.40 Zữ kăn: 6.5 Kịch zuử: 0.0 Đoan l\"&#-237;;: 5 GTBH: 6.50 KH: 6"

regex = re.compile(r":\s*([\d\.]+)")
result = regex.findall(string)
print(result)

结果。

代码语言:javascript
复制
['8.40', '6.5', '0.0', '5', '6.50', '6']
票数 1
EN

Stack Overflow用户

发布于 2020-10-31 11:52:22

您尝试的模式(?<!\:)\d{1,2}\.?\d*?以一个数字开始匹配,直接向左断言的不是:,在示例中,所有数字的数据都是正确的。

由于冒号后面有一个或多个空格,所以可以使用捕获组而不是查找:

代码语言:javascript
复制
:[^\S\r\n]+(\d+(?:\.\d+)?)

解释

  • :匹配
  • [^\S\r\n]+匹配没有换行符的1+空格字符
  • ( Capture group 1
    • \d+(?:\.\d+)?将1+数字与可选的十进制部分匹配。

  • )闭组1

Regex演示 x- Python演示

使用PyPi正则模,如果空格字符可以是可选的,还可以在左边断言:,在匹配数字之前先断言0+空格字符:

代码语言:javascript
复制
(?<=:\s*)\d+(?:\.\d+)?

Regex演示 x- Python演示

作为另一种选择,为了从示例数据中获取所需的数字,而不是检查左边的:,您还可以在右边直接断言没有;

代码语言:javascript
复制
\d+(?:\.\d+)?\b(?!;)

Regex演示

票数 1
EN

Stack Overflow用户

发布于 2020-10-31 10:23:15

试试这个:

re.findall(":\\s*([0-9.]+)",s)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64618790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档