使用正则表达式,我需要获得预期的输出:
string="Tue Apr 24 22:35:48 2018 53/e33
hello:55|Wordcap|abc|abc generate|6|Wordcapdata_proto_req=WINTER Wordcapdata_sample_resp=summer 2.4.5 WordcapTotal_reject=56 WordcapAddition_sum=TEA CUP ONE"
Expected output = ['data_proto_req=WINTER', 'data_sample_resp=summer 2.4.5', 'Total_reject=56', 'Addition_sum=TEA CUP ONE']
问题在于处理这些字符串中的空格:summer 2.4.5
或 TEA CUP ONE
这是我最初尝试获取正则表达式:
print re.findall(r'[W]*ordcap([^|].*?=.*?)[\s|\t]*(?:W|$)', string)
我得到的输出是:
['data_proto_req=', 'data_sample_resp=summer 2.4.5', 'Total_reject=56', 'Addition_sum=TEA CUP ONE']
最佳答案
请注意,(?:W|$)
在下一场比赛中消耗了 W
,因此您使用了 [W]*
。事实上,lookarounds就是这样的情况。应该使用它们,因为它们不消耗文本,只需检查是否存在匹配,而不将匹配的文本放入匹配值中。
您可以使用
\bWordcap([^|=]*=.*?)(?=\s*\bWordcap|$)
请参阅regex demo
详细信息
\bWordcap
- 字边界,后跟Wordcap
([^|=]*=[^|]*?)
- 第 1 组:[^|=]*
- 除|
和=
之外的任何 0+ 个字符,尽可能多=
-=
符号.*?
- 除换行符之外的任何 0 个以上字符,尽可能少
(?=\s*\bWordcap|$)
- 正向前瞻,需要 0+ 空格、单词边界和紧邻右侧的Wordcap
字符串当前位置或字符串结尾。
请参阅Python demo :
import re
rx = r"\bWordcap([^|=]*=.*?)(?=\s*\bWordcap|$)"
s = "Tue Apr 24 22:35:48 2018 53/e33 \nhello:55|Wordcap|abc|abc generate|6|Wordcapdata_proto_req=WINTER Wordcapdata_sample_resp=summer 2.4.5 WordcapTotal_reject=56 WordcapAddition_sum=TEA CUP ONE"
print(re.findall(rx, s))
# => ['data_proto_req=WINTER', 'data_sample_resp=summer 2.4.5', 'Total_reject=56', 'Addition_sum=TEA CUP ONE']
关于python - 提取带有空格后跟字符串或行尾的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50016381/