Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式用于匹配十六进制字符和复数字符之间的数字_Python_Regex - Fatal编程技术网

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

Python 正则表达式用于匹配十六进制字符和复数字符之间的数字,python,regex,Python,Regex,我引用了一段文字: "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"

我引用了一段文字:

"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"
你能告诉我怎么做这个任务吗?谢谢

我只是更新我所做的:

(?
使用
Ngo&#-225;n:8.40zữ kăn:6.5 kị楚国ử:   0.0Đoan l“&#-237;;:5 GTBH:6.50 KH:6
作为测试字符串。请参阅

Sill,此模式捕获十六进制值:
225
237
。我们可以修改一些内容来提取这些值吗?

试试这个:


re.findall(“:\\s*([0-9.]+)”,s)
您可以将
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']
您尝试的模式
(?以一个数字开始匹配,断言直接在左边的不是
,在示例中,所有数字的数据都是正确的

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

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

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


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

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

你试过什么吗?太好了!有一件事你可以解释一下,当我测试你建议的模式时:“\s*([\d\.]+)”在线。结果仍然保留冒号”:“但是当我使用re.compile和re.findall运行时,结果是完美的?当我们使用捕获组的
findall
时。函数
findall
只返回捕获的组。你可以阅读本文:感谢有用的文章。感谢第四只鸟!你的答案也是完美的。”。
\d+(?:\.\d+)?\b(?!;)