6

我正在尝试删除下面这些字符串的括号区域,但我无法使正则表达式工作:(

数据:

x (LOC)
ds ds (32C)
d'ds ds (LeC)
ds-d da(LOQ)
12345 (deC)

正则表达式尝试:

[ \(\w+\)]

正则表达式101:

http://regex101.com/r/bD8fE2

示例代码

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
4

2 回答 2

8

去掉方括号;您不匹配字符类:

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类的所有字符、+加号或右括号的集合。

于 2013-11-05T16:38:20.053 回答
5

方括号内的任何内容都与字符的顺序无关,因为[ ... ]它是一个字符类。完全删除它们:

r" \(\w+\)"

我会添加一个?可选空间:

r" ?\(\w+\)"

正则表达式101演示

于 2013-11-05T16:39:28.657 回答