[python] 두 마커 사이의 부분 문자열을 추출하는 방법은 무엇입니까?

문자열이 'gfgfdAAA1234ZZZuijjk'있고 '1234'일부만 추출하고 싶다고 가정 해 봅시다 .

나는 단지 몇 개의 문자가 무엇인지 AAA, 그리고 ZZZ내가 관심을 갖고있는 부분 이후에 무엇이 될지 알고 있습니다 1234.

sed그 문자열과 같은 것을 할 수 있습니다 :

echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"

그리고 이것은 1234결과적으로 나를 줄 것 입니다.

파이썬에서 같은 일을하는 방법?



답변

정규 표현식 사용- 추가 참조를위한 문서

import re

text = 'gfgfdAAA1234ZZZuijjk'

m = re.search('AAA(.+?)ZZZ', text)
if m:
    found = m.group(1)

# found: 1234

또는:

import re

text = 'gfgfdAAA1234ZZZuijjk'

try:
    found = re.search('AAA(.+?)ZZZ', text).group(1)
except AttributeError:
    # AAA, ZZZ not found in the original string
    found = '' # apply your error handling

# found: 1234


답변

>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> start = s.find('AAA') + 3
>>> end = s.find('ZZZ', start)
>>> s[start:end]
'1234'

그런 다음 원하는 경우 re 모듈과 함께 정규 표현식을 사용할 수도 있지만 필요하지 않습니다.


답변

정규식

import re

re.search(r"(?<=AAA).*?(?=ZZZ)", your_text).group(0)

위에있는 AttributeError“AAA”및 “ZZZ”가 없으면 위와 같이 실패합니다 .your_text

문자열 메소드

your_text.partition("AAA")[2].partition("ZZZ")[0]

“AAA”또는 “ZZZ”가 존재하지 않으면 위의 문자열은 빈 문자열을 반환합니다 your_text.

PS Python Challenge?


답변

import re
print re.search('AAA(.*?)ZZZ', 'gfgfdAAA1234ZZZuijjk').group(1)


답변

일회성 스크립트를위한 나의 빠른 버전 인 이것을 아무도 언급하지 않은 것에 놀랐다 :

>>> x = 'gfgfdAAA1234ZZZuijjk'
>>> x.split('AAA')[1].split('ZZZ')[0]
'1234'


답변

한 줄의 코드 만 사용하면됩니다.

>>> import re

>>> re.findall(r'\d{1,5}','gfgfdAAA1234ZZZuijjk')

>>> ['1234']

결과는 목록을받습니다 …


답변

이를 위해 re 모듈을 사용할 수 있습니다 .

>>> import re
>>> re.compile(".*AAA(.*)ZZZ.*").match("gfgfdAAA1234ZZZuijjk").groups()
('1234,)