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

最後の 1 つ前の例では、開き括弧 ( ) の前にスペース(がないため、一致しません。そのパターンも機能させる必要がある場合は、スペースをオプションにすることができます。

item = re.sub(r" ?\(\w+\)", "", item)

おそらく、閉じ括弧ではないものに一致させることもできます。

item = re.sub(r" ?\([^)]+\)", "", item)

これは、 だけでなくより広い範囲の文字に一致し\wます。

正規表現では、角括弧 ,[...]は文字クラスを示します。1 回一致する文字のセット。クラスとは、スペース、左括弧、クラスのすべての文字、プラス、または右括弧を含むセットに一致する場合、 1 つの[ \(w+\)]文字に一致することを意味します。\w+

于 2013-11-05T16:38:20.053 に答える
5

[ ... ]は文字クラスであるため、文字の順序に関係なく、角括弧内のものはすべて取得されます。それらを完全に削除します。

r" \(\w+\)"

そして?、オプションのスペースに a を追加します。

r" ?\(\w+\)"

正規表現101のデモ

于 2013-11-05T16:39:28.657 に答える