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+),
检索第 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 的右上面板已对其进行说明,它将如何匹配一些示例输入。
我正在尝试编写一个排除方括号及其中的文本的正则表达式。
我的示例文本如下所示:'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+),
检索第 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 的右上面板已对其进行说明,它将如何匹配一些示例输入。