[英]Ignore an optional word if present in a string - regular expression in python
我正在尝试使用 Python 将字符串与正则表达式匹配,但如果存在可选单词,请忽略它。
例如,我有以下几行:
First string
Second string [Ignore This Part]
Third string (1) [Ignore This Part]
我希望在[Ignore This Part]
之前捕获所有内容。 请注意,我还想排除[Ignore This Part]
之前的空格。 因此我的结果应该是这样的:
First string
Second string
Third string (1)
我尝试了以下正则表达式,但没有成功,因为它仍然捕获[Ignore This Part]
:
.+(?:\s\[.+\])?
任何援助将不胜感激。
我在 Window 10 上使用 python 3.8。
编辑:这些示例旨在一次处理一行。
也许您可以删除不想匹配的部分:
[^\S\n]*\[[^][\n]*]$
解释
[^\S\n]*
匹配可选空格\[[^][\n]*]
匹配来自[....]
$
字符串结尾例子
import re
pattern = r"[^\S\n]*\[[^][\n]*]$"
s = ("First string\n"
"Second string [Ignore This Part]\n"
"Third string (1) [Ignore This Part]")
result = re.sub(pattern, "", s, 0, re.M)
if result:
print(result)
Output
First string
Second string
Third string (1)
如果你不想留下一个空字符串,你可以在左边断言一个非空白字符:
(?<=\S)[^\S\n]*\[[^][\n]*]$
使用您显示的示例,请尝试以下正则表达式。 使用所示样本进行编写和测试。
^(.*?)(?:$|\s\[[^]]*\]$)
这是上述正则表达式的在线演示。
以下是相同的 Python3 代码,使用 Python3 的re
模块及其findall
function 以及启用的re.M
标志。
import re
var="""First string
Second string [Ignore This Part]
Third string (1) [Ignore This Part]"""
re.findall(r'^(.*?)(?:$|\s\[[^]]*\]$)',var,re.M)
['First string', 'Second string', 'Third string (1)']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.