Den*_*ian 6 python regex python-2.7
我正在尝试删除下面这些字符串的括号区域,但我无法正常工作:(
x (LOC)
ds ds (32C)
d'ds ds (LeC)
ds-d da(LOQ)
12345 (deC)
[ \(\w+\)]
items = ["x (LOC)", "ds ds (32C)", "d'ds ds (LeC)", "ds-d da(LOQ)", "12345 (deC)"]
for item in items:
    item = re.sub(r"[ \(\w+\)]", "", item)
    print item
取下方括号; 你没有匹配一个字符类:
item = re.sub(r" \(\w+\)", "", item)
演示:
>>> items = ["x (LOC)", "ds ds (32C)", "d'ds ds (LeC)", "ds-d da(LOQ)", "12345 (deC)"]
>>> for item in items:
...     print re.sub(r" \(\w+\)", "", item)
... 
x
ds ds
d'ds ds
ds-d da(LOQ)
12345
一个但最后一个示例在左括号(()之前没有空格,因此不匹配.如果您需要该模式也可以使空间可选:
item = re.sub(r" ?\(\w+\)", "", item)
也许匹配任何不是右括号的东西也适合你:
item = re.sub(r" ?\([^)]+\)", "", item)
这与更多的字符匹配\w.
在正则表达式中,方括号[...]表示一个字符类; 一组匹配一次的字符.该类[ \(w+\)]意味着:匹配一个字符,如果它匹配包括空格,左括号,\w类的所有字符,+加号或右括号的集合.
无论您拥有角色的顺序如何,都会使用方括号内的任何内容 [ ... ]是一个字符类.完全删除它们:
r" \(\w+\)"
我会添加一个?可选空间:
r" ?\(\w+\)"