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 组的一个或多个非空行。