我正在尝试拆分数据
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等)。 ,)“
我想将数据拆分为
2.11.111栏:给我喝茶
111.2包含我很好
有什么方法可以根据模式分割文本数据。
答案 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+数字或字符串结尾