web-dev-qa-db-ja.com

括弧内の文字列を抽出します-PYTHON

文字列「Name(something)」があり、括弧内の文字列の部分を抽出しようとしています!

Iv'eは次の解決策を試しましたが、私が探している結果が得られていないようです。

n.split('()')

name, something = n.split('()')
6
Olly_t

単純な正規表現を使用して、括弧の間のすべてをキャッチできます。

>>> import re
>>> s = 'Name(something)'
>>> re.search('\(([^)]+)', s).group(1)
'something'

正規表現は最初の "("に一致し、次にnot a ")"のすべてに一致します。

  • \(文字「(」に文字通り一致します
  • キャプチャグループ([^)]+)「)」以外のものと貪欲に一致する
14
Maroun

@Maroun Marounの回答の改善として:

re.findall('\(([^)]+)', s)

括弧の間にある文字列のすべてのインスタンスを検索します

4
tamtam

あなたの例のように分割を使用することができますが、このように

val = s.split('(', 1)[1].split(')')[0]

または正規表現を使用する

1
Luca

()(正規表現でバックスラッシュを使用してこれらをエスケープする必要があります)を探し、.*を使用してすべての文字を照合できます(これをグループにキャプチャします)。

例:

import re

s = "name(something)"

regex = r'\((.*)\)'

text_inside_paranthesis = re.match(regex, s).group(1)

print(text_inside_paranthesis)

出力:

something

正規表現がないと、次のことができます。

text_inside_paranthesis =  s[s.find('(')+1:s.find(')')]

出力:

something
1

re.matchを使用できます:

>>> import re
>>> s = "name(something)"
>>> na, so = re.match(r"(.*)\((.*)\)" ,s).groups()
>>> na, so
('name', 'something')

これは2つの(.*)に一致します。これは何でも意味し、2番目は括弧\(\)の間にあります。

0
Ohad Eytan