Python正则表达式:不包括方括号和里面的文字

Python regex: excluding square brackets and the text inside

我正在尝试编写一个排除方括号及其中的文本的正则表达式。

我的示例文本如下所示:'WordA, WordB, WordC, [WordD]'

我想匹配字符串中除 '[WordD]' 之外的每个文本项。我试过使用否定前瞻,比如... [A-Z][A-Za-z]+(?!\[[A-Z]+\]) 但这样做仍然匹配括号内的文本。

负面前瞻是最好的方法吗?如果是这样,我哪里错了?

而不是正则表达式,您可以考虑用逗号分隔,然后根据单词是否以 [:

开头进行过滤
output = [word for word in str.split(', ') if word[0] != '[']

如果您使用正则表达式,您可以匹配字符串的开头,或者查找 space:

re.findall(r'(?:^|(?<= ))[A-Z][A-Za-z]+', str)

或者您可以在单词边界之后对 ] 进行否定预测:

output = re.findall(r'[A-Z][A-Za-z]+\b(?!\])', str)

这可以很简单

(\w+),

Regex Demo

检索第 1 组的值以获得所需结果。

我猜你可能想写一些类似于以下的表达式:

[A-Z][a-z]*[A-Z](?=,|$)

或者,

[A-Z][a-z]+[A-Z](?=,|$)

测试

import re


regex = r"[A-Z][a-z]*[A-Z](?=,|$)"
string = """
WordA, WordB, WordC, [WordD]
WordA, WordB, WordC, [WordD], WordE
"""

print(re.findall(regex, string))

输出

['WordA', 'WordB', 'WordC', 'WordA', 'WordB', 'WordC', 'WordE']

如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些示例输入。