python中的正则表达式模式匹配

时间:2019-02-12 12:23:05

标签: regex python-3.x

我正在尝试拆分数据

rest = [" hgod eruehf 10 SECTION 1. DATA: find my book 2.11.111 COLUMN: get me tea","111.2 CONTAIN  i am good"]

match = re.compile(r'(((\d[.])(\d[.]))+\s(\w[A-Z]+:|\w+))')
out = match.search(rest)
print(out.group(0))

我发现此模式为“多个十进制数字(例如:1。/ 1.1。/ 1.21.1等),然后是字符,直到另一个多个十进制数字(例如:1。/ 1.1。/ 1.21.1等)。 ,)“

我想将数据拆分为

  1. 数据:找到我的书

2.11.111栏:给我喝茶

111.2包含我很好

有什么方法可以根据模式分割文本数据。

1 个答案:

答案 0 :(得分:2)

您可以使用来获得预期的匹配结果

import re
rest = [" hgod eruehf 10 SECTION 1. DATA: find my book 2.11.111 COLUMN: get me tea","111.2 CONTAIN  i am good"]
res = []
for s in rest:
    res.extend(re.findall(r'\d+(?=\.)(?:\.\d+)*.*?(?=\s*\d+(?=\.)(?:\.\d+)*|\Z)', s))

print(res)
# => ['1. DATA: find my book', '2.11.111 COLUMN: get me tea', '111.2 CONTAIN  i am good']

请参见Python demo

将正则表达式应用于rest列表中的每个项目,并将所有匹配项保存到res列表中。

Pattern详细信息

  • \d+-1个以上数字
  • (?=\.)-当前位置的右边必须有一个.
  • (?:\.\d+)*-重复.的0次或多次,然后再输入1+位数字
  • .*?-除换行符外的0+个字符,并且尽可能少
  • (?=\s*\d+(?=\.)(?:\.\d+)*|\Z)-最多0+个空格,1+个数字,紧跟着当前位置的右边是.,0个或多个重复的.,然后是1+数字或字符串结尾