문자열이 '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,)
