괄호 사이의 텍스트를 반환하는 정규식
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
'programing' 카테고리의 다른 글
ASP.NET Identity에서 클레임을 업데이트하는 방법은 무엇입니까? (0) | 2023.05.22 |
---|---|
Azure 함수가 여러 개인 솔루션을 어떻게 구성해야 합니까? (0) | 2023.05.22 |
MongoDB - 오류: 잘못된 스키마, mongodb가 필요합니다. (0) | 2023.05.22 |
String.Format - 작동 방법 및 사용자 정의 형식 문자열 구현 방법 (0) | 2023.05.17 |
손상된 파일 처리 (0) | 2023.05.17 |