Python 中的正则表达式 unicode 多行问题
regex unicode multiline problem in Python
我有一些包含 Unicode 字符的字符串,如下所示:
رده سنی مجاز :
10.2-15.3
8.71-9.13
25.08 - 31.2
زده های سنی غیرمجاز:
16.5-18.4
9.15 - 10.02
20.02-21.30
我想匹配第一个数字范围,如下所示:
10.2-15.3
8.71-9.13
25.08-31.2
我正在使用以下代码:
print(re.findall('رده سنی مجاز :.*(.*\d+.\d+-\d+.\d+.*)', string, re.DOTALL))
但是 returns:
['25.08-31.2']
我建议将固定文本之后的所有字符串提取到一个空行,然后将提取的部分拆分为单独的行:
import re
p = r"رده سنی مجاز :\s*\n(.+(?:\n.+)*)"
text = "رده سنی مجاز : \n 10.2-15.3\n 8.71-9.13\n 25.08 - 31.2\n\nزده های سنی غیرمجاز:\n 16.5-18.4\n 9.15 - 10.02\n 20.02-21.30"
m = re.search(p, text)
if m:
print([x.strip() for x in m.group(1).splitlines()])
# => ['10.2-15.3', '8.71-9.13', '25.08 - 31.2']
参见Python demo and the regex demo。
详情:
رده سنی مجاز :
- 固定字符串
\s*
- 零个或多个空格
\n
- 一个换行符
(.+(?:\n.+)*)
- 捕获到第 1 组的一个或多个非空行。
我有一些包含 Unicode 字符的字符串,如下所示:
رده سنی مجاز :
10.2-15.3
8.71-9.13
25.08 - 31.2
زده های سنی غیرمجاز:
16.5-18.4
9.15 - 10.02
20.02-21.30
我想匹配第一个数字范围,如下所示:
10.2-15.3
8.71-9.13
25.08-31.2
我正在使用以下代码:
print(re.findall('رده سنی مجاز :.*(.*\d+.\d+-\d+.\d+.*)', string, re.DOTALL))
但是 returns:
['25.08-31.2']
我建议将固定文本之后的所有字符串提取到一个空行,然后将提取的部分拆分为单独的行:
import re
p = r"رده سنی مجاز :\s*\n(.+(?:\n.+)*)"
text = "رده سنی مجاز : \n 10.2-15.3\n 8.71-9.13\n 25.08 - 31.2\n\nزده های سنی غیرمجاز:\n 16.5-18.4\n 9.15 - 10.02\n 20.02-21.30"
m = re.search(p, text)
if m:
print([x.strip() for x in m.group(1).splitlines()])
# => ['10.2-15.3', '8.71-9.13', '25.08 - 31.2']
参见Python demo and the regex demo。
详情:
رده سنی مجاز :
- 固定字符串\s*
- 零个或多个空格\n
- 一个换行符(.+(?:\n.+)*)
- 捕获到第 1 组的一个或多个非空行。