[PYTHON] 두 마커 사이에서 부분 문자열을 추출하는 방법은 무엇입니까?
PYTHON두 마커 사이에서 부분 문자열을 추출하는 방법은 무엇입니까?
문자열 'gfgfdAAA1234ZZZuijjk'가 있고 '1234'부분 만 추출하려고한다고 가정 해 봅시다.
나는 AAA 직전에 몇 인물이 될 것인지, ZZZ 이후에는 1234에 관심이있는 부분을 알 수 있습니다.
sed를 사용하면 다음과 같이 문자열로 처리 할 수 있습니다.
echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"
그리고 이것은 1234를 결과로 줄 것입니다.
파이썬에서 같은 일을하는 방법?
해결법
-
==============================
1.정규 표현식 사용 - 추가 참조 용 문서
정규 표현식 사용 - 추가 참조 용 문서
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
-
==============================
2.
>>> s = 'gfgfdAAA1234ZZZuijjk' >>> start = s.find('AAA') + 3 >>> end = s.find('ZZZ', start) >>> s[start:end] '1234'
원하는 경우 re 모듈과 regexps를 함께 사용할 수 있지만 필요하지는 않습니다.
-
==============================
3.
import re re.search(r"(?<=AAA).*?(?=ZZZ)", your_text).group(0)
your_text에 "AAA"및 "ZZZ"가 없으면 위의 속성은 AttributeError와 함께 실패합니다.
your_text.partition("AAA")[2].partition("ZZZ")[0]
your_text에 "AAA"또는 "ZZZ"가 없으면 위의 코드는 빈 문자열을 반환합니다.
PS 파이썬 챌린지?
-
==============================
4.
import re print re.search('AAA(.*?)ZZZ', 'gfgfdAAA1234ZZZuijjk').group(1)
-
==============================
5.그것을 위해 re 모듈을 사용할 수 있습니다 :
그것을 위해 re 모듈을 사용할 수 있습니다 :
>>> import re >>> re.compile(".*AAA(.*)ZZZ.*").match("gfgfdAAA1234ZZZuijjk").groups() ('1234,)
-
==============================
6."$ 문자열"| 슬픈 -A "s.. *이 \ (. *) * Zhz. * | \ 1 |"
"$ 문자열"| 슬픈 -A "s.. *이 \ (. *) * Zhz. * | \ 1 |"
동일한 정규식을 사용하여 re.sub 함수를 사용하여 동일한 작업을 수행 할 수 있습니다.
>>> re.sub(r'.*AAA(.*)ZZZ.*', r'\1', 'gfgfdAAA1234ZZZuijjk') '1234'
기본 sed에서 캡쳐 그룹은 \ (.. \)로 표시되지만, 파이썬에서는 (..)로 표시됩니다.
-
==============================
7.
def FindSubString(strText, strSubString, Offset=None): try: Start = strText.find(strSubString) if Start == -1: return -1 # Not Found else: if Offset == None: Result = strText[Start+len(strSubString):] elif Offset == 0: return Start else: AfterSubString = Start+len(strSubString) Result = strText[AfterSubString:AfterSubString + int(Offset)] return Result except: return -1 # Example: Text = "Thanks for contributing an answer to Stack Overflow!" subText = "to" print("Start of first substring in a text:") start = FindSubString(Text, subText, 0) print(start); print("") print("Exact substring in a text:") print(Text[start:start+len(subText)]); print("") print("What is after substring \"%s\"?" %(subText)) print(FindSubString(Text, subText)) # Your answer: Text = "gfgfdAAA1234ZZZuijjk" subText1 = "AAA" subText2 = "ZZZ" AfterText1 = FindSubString(Text, subText1, 0) + len(subText1) BeforText2 = FindSubString(Text, subText2, 0) print("\nYour answer:\n%s" %(Text[AfterText1:BeforText2]))
-
==============================
8.단지 누군가가 내가 한 것과 똑같은 일을해야 할 것입니다. 한 줄에 괄호 안에있는 모든 것을 추출해야했습니다. 예를 들어, '미국 대통령 (버락 오바마)이 만난 선 ...'이 있고 '버락 오바마'만 얻고 싶다면 해결책입니다.
단지 누군가가 내가 한 것과 똑같은 일을해야 할 것입니다. 한 줄에 괄호 안에있는 모든 것을 추출해야했습니다. 예를 들어, '미국 대통령 (버락 오바마)이 만난 선 ...'이 있고 '버락 오바마'만 얻고 싶다면 해결책입니다.
regex = '.*\((.*?)\).*' matches = re.search(regex, line) line = matches.group(1) + '\n'
나는. 슬래시 기호를 사용하여 괄호를 차단해야합니다. 파이썬이 더 많은 정규 표현식에 대해 문제가 되긴하지만.
또한 어떤 경우에는 정규 표현식 정의 앞에 'r'기호가 표시 될 수 있습니다. r 접두사가 없으면 C와 같은 이스케이프 문자를 사용해야합니다. 여기에 대한 자세한 설명이 있습니다.
-
==============================
9.한 줄의 코드 만 사용하면됩니다.
한 줄의 코드 만 사용하면됩니다.
>>> import re >>> re.findall(r'\d{1,5}','gfgfdAAA1234ZZZuijjk') >>> ['1234']
결과는 목록을받을 것이다 ...
-
==============================
10.
>>> s = '/tmp/10508.constantstring' >>> s.split('/tmp/')[1].split('constantstring')[0].strip('.')
-
==============================
11.파이썬에서 string에서 부분 문자열을 추출하는 것은 정규 표현식 (re) 모듈에서 findall 메소드를 사용하여 수행 할 수 있습니다.
파이썬에서 string에서 부분 문자열을 추출하는 것은 정규 표현식 (re) 모듈에서 findall 메소드를 사용하여 수행 할 수 있습니다.
>>> import re >>> s = 'gfgfdAAA1234ZZZuijjk' >>> ss = re.findall('AAA(.+)ZZZ', s) >>> print ss ['1234']
-
==============================
12.일치하는 것이 없을 경우 다른 문자열을 반환하는 라이너 하나. 편집 : 개선 된 버전은 다음 함수를 사용하고, "찾지 못함"을 필요한 경우 다른 것으로 바꿉니다.
일치하는 것이 없을 경우 다른 문자열을 반환하는 라이너 하나. 편집 : 개선 된 버전은 다음 함수를 사용하고, "찾지 못함"을 필요한 경우 다른 것으로 바꿉니다.
import re res = next( (m.group(1) for m in [re.search("AAA(.*?)ZZZ", "gfgfdAAA1234ZZZuijjk" ),] if m), "not-found" )
덜 최적화 된이 다른 방법은 정규식 두 번째 시간을 사용하지만 더 짧은 방법을 찾지 못했습니다.
import re res = ( ( re.search("AAA(.*?)ZZZ", "gfgfdAAA1234ZZZuijjk") or re.search("()","") ).group(1) )
from https://stackoverflow.com/questions/4666973/how-to-extract-the-substring-between-two-markers by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 항목의 길이가 다른 사전에서 데이터 프레임 만들기 (0) | 2018.10.11 |
---|---|
[PYTHON] 날짜 문자열을 다른 형식으로 변환하는 방법 [중복] (0) | 2018.10.11 |
[PYTHON] 파이썬 함수 포인터 (0) | 2018.10.11 |
[PYTHON] 장고 템플릿 내에서 인덱스별로 목록 항목을 참조 하시겠습니까? (0) | 2018.10.11 |
[PYTHON] 수레의 경우 range () (0) | 2018.10.11 |