正则表达式用于匹配十六进制字符和复数字符之间的数字

2024-05-14 22:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我引用了一段文字:

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

我想使用正则表达式提取Python中:之后的所有数字,如下所示:

"8.40           6.5         0.0        5           6.50            6"

你能告诉我怎么做这个任务吗?谢谢

我只是更新我所做的:

(?<!\:)\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作为测试字符串。见demo here

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


Tags: 字符串heredemo模式数字ch文字zu
3条回答

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

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

:[^\S\r\n]+(\d+(?:\.\d+)?)

解释

  • :逐字匹配
  • [^\S\r\n]+匹配1+空格字符,不带换行符
  • (捕获组1
    • \d+(?:\.\d+)?将1+个数字与可选的小数部分匹配
  • )关闭组1

Regex demoPython demo


使用PyPi regex module,如果whitspace字符是可选的,您还可以在匹配数字之前在左侧断言:,后跟0+空格字符:

(?<=:\s*)\d+(?:\.\d+)?

Regex demoPython demo


或者,为了从示例数据中获得所需的数字,您也可以直接在右侧断言no^{,而不是在左侧检查:

\d+(?:\.\d+)?\b(?!;)

Regex demo

可以将re.findall与以下正则表达式一起使用

:\s*([\d\.]+)

我还在Python上测试了结果

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)

结果

['8.40', '6.5', '0.0', '5', '6.50', '6']

试试这个:

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

相关问题 更多 >

    热门问题