繁体   English   中英

如果字符串中存在可选单词,则忽略 - python 中的正则表达式

[英]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。

编辑:这些示例旨在一次处理一行。

使用[^[]代替. 所以它不匹配任何带方括号的东西,也不匹配换行符。

^[^[\n]+(?\s\[.+\])?

演示

也许您可以删除不想匹配的部分:

[^\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*\[[^]]*]$)

正则表达式演示

如果您想要更好地执行正则表达式,那么我建议:

^\S+(?:\s+\S+)*?(?=$|\s*\[[^]]*]$)

正则表达式演示 2

正则表达式详细信息:

  • ^ : 开始
  • .+? : 匹配 1+ 个任意字符(惰性匹配)
  • (?= : 开始前瞻
    • $ : 结束
    • | : 或者
    • \s* : 匹配 0 个或多个空格
    • \[[^]]*] : 匹配[...]文本
    • $ : 结束
  • ) :

使用您显示的示例,请尝试以下正则表达式。 使用所示样本进行编写和测试。

^(.*?)(?:$|\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM