programing

괄호 사이의 텍스트를 반환하는 정규식

starjava 2023. 5. 22. 20:04
반응형

괄호 사이의 텍스트를 반환하는 정규식

u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

괄호 안에 있는 내용만 있으면 됩니다.

문제가 정말 이렇게 간단하다면 정규식이 필요하지 않습니다.

s[s.find("(")+1:s.find(")")]

사용하다re.search(r'\((.*?)\)',s).group(1):

>>> import re
>>> s = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
>>> re.search(r'\((.*?)\)',s).group(1)
u"date='2/xc2/xb2',time='/case/test.png'"

모든 경우를 찾으려는 경우:

>>> re.findall('\(.*?\)',s)
[u"(date='2/xc2/xb2',time='/case/test.png')", u'(eee)']

>>> re.findall('\((.*?)\)',s)
[u"date='2/xc2/xb2',time='/case/test.png'", u'eee']

tkerwin의 답변을 기반으로 합니다. 만약 당신이 다음과 같은 괄호를 가지고 있다면.

st = "sum((a+b)/(c+d))"

번째 시작 괄호마지막 닫는 괄호 사이의 모든 것을 가져가야 한다면 그의 대답은 작동하지 않을 것입니다.(a+b)/(c+d)문자열의 왼쪽에서 검색을 찾고 첫 번째 닫는 괄호에서 중지하기 때문입니다.

이 문제를 해결하려면 다음을 사용해야 합니다.rfind수술의 두 번째 부분을 위해, 그래서 그것은.

st[st.find("(")+1:st.rfind(")")]
import re

fancy = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

print re.compile( "\((.*)\)" ).search( fancy ).group( 1 )
contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
    print(contents_re.groupdict()['contents'])

정규식을 사용할 필요가 없습니다...리스트 슬라이싱을 사용하면 됩니다...

string="(tidtkdgkxkxlgxlhxl) ¥£%#_¥#_¥#_¥#"
print(string[string.find("(")+1:string.find(")")])

소울킬러의 대답은 훌륭합니다.나의 경우, 나는 추가 괄호를 처리하고 괄호 안에 있는 단어만 추출해야 했습니다. 아주 작은 변화가 문제를 해결할 것입니다.

>>> s=u'abcde((((a+b))))-((a*b))'
>>> re.findall('\((.*?)\)',s)
['(((a+b', '(a*b']
>>> re.findall('\(+(.*?)\)',s)
['a+b', 'a*b']

다음은 Panda에서 괄호 사이의 문자열을 추출하는 몇 가지 방법입니다.\(([^()]+)\)일치하는 정규식(온라인 데모 참조)

  • \(a의(
  • ([^()]+)그런 다음 그룹 1에 하나 이상의 문자를 캡처합니다.(그리고.)
  • \)a의)챠의

다음을 사용하여 첫 번째 항목 추출:

import pandas as pd
df = pd.DataFrame({'Description':['some text (value 1) and (value 2)']})
df['Values'] = df['Description'].str.extract(r'\(([^()]+)\)')
# => df['Values']
#    0    value 1
#    Name: Values, dtype: object

다음을 사용하여 모든 발생 항목 추출(검색):

import pandas as pd
df = pd.DataFrame({'Description':['some text (value 1) and (value 2)']})
df['Values'] = df['Description'].str.findall(r'\(([^()]+)\)')
# => df['Values']
#    0    [value 1, value 2]
#    Name: Values, dtype: object

df['Values'] = df['Description'].str.findall(r'\(([^()]+)\)').str.join(', ')
# => df['Values']
#    0    value 1, value 2
#    Name: Values, dtype: object

참고:.str.join(', ')결과 문자열 목록에서 쉼표로 구분된 문자열을 만드는 데 사용됩니다.시나리오에 맞게 이 구분 기호를 조정할 수 있습니다.

내가 무언가를 빠뜨리지 않았다면, @tkerwin:s[s.find("(")+1:s.rfind(")")]에 대한 작은 수정.

문자열 끝에서 검색을 시작하려면 두 번째 검색이 find여야 합니다.

테스트 케이스

s = "(rein<unint>(pBuf) +fsizeof(LOG_RECH))"

결과

['pBuf', 'LOG_RECH', 'rein<unint>(pBuf) +fsizeof(LOG_RECH)']

시행하다

def getParenthesesList(s):
    res = list()
    left = list()
    for i in range(len(s)):
        if s[i] == '(':
            left.append(i)
        if s[i] == ')':
            le = left.pop()
            res.append(s[le + 1:i])
    print(res)
    return res

언급URL : https://stackoverflow.com/questions/4894069/regular-expression-to-return-text-between-parenthesis

반응형