python - 提取带有空格后跟字符串或行尾的文本

标签 python regex

使用正则表达式,我需要获得预期的输出:

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.5TEA 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/

相关文章:

python - 验证日期(格式和值)

python - 在 Django 中上传和提交 csv 文件时,“str”不支持缓冲区接口(interface)

python - 循环创建多个数据框

php - 如何将内联 css 更改为自由属性

php - 正则表达式取代 reg 商标

java - 正则表达式 - 查找文件中的所有字符串函数参数

regex - 在 Resharper 中使用 Regex 编写自定义模式

python - MySQLdb 没有用数据填充数据库中的行,但是 feildes 是自动递增的

python - 精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用 `zero_division` 参数来控制此行为

python - 如何调用 python 包中包含的数据?