문장에서 각 단어에 대해 그룹을 만드는 방법은 무엇입니까?
-
12-09-2020 - |
문제
이것은 어리석은 질문 일 수 있지만 ...
다음과 같은 문장이 있습니다.
빠른 갈색 여우
또는 당신은 다음과 같은 문장을 얻을 수 있습니다 :
빠른 갈색 여우가 게으른 개 위에 뛰어 왔습니다
Simple Regexp (\ w *)는 첫 번째 단어 "the"를 찾아 그룹에 넣습니다.
첫 번째 문장의 경우 각 단어를 자체적으로 넣으려면 \ w * (\ w *) \ s * (\ w *) \ s * (\ w *) \ s *를 쓸 수 있습니다. 그룹,하지만 문장의 단어 수를 알고 있다고 가정합니다.
임의의 문장에 각 단어를 자체 그룹으로 두는 정규 표현식을 작성하는 것이 가능합니까? 당신이 좋아하는 것을 할 수 있다면 좋을 것입니다 (? : (\ w *) \ s *) * 그것은 (\ w *)의 각 인스턴스를 그룹화하지만 작동하지 않습니다.
나는이 일을 파이썬에서하고 있으며, 내 유스 케이스는 분명히 "빠른 갈색 여우"보다 조금 더 복잡하다. 그래서 정규식이 한 줄로이 일을 할 수 있다면 멋지게 될 것입니다. 다음 최상의 솔루션은 re.findall () 또는 유사한 것을 사용하여 모든 일치를 반복하는 것입니다.
당신이 가질 수있는 모든 통찰력에 감사드립니다.
편집 : 완전성을 위해서는 여기에 내 실제 사용 사례와 내가 당신의 도움을 이용하여 어떻게 해결했는지에 대해 어떻게 해결했습니다. 다시 한 번 감사합니다.
>>> s = '1 0 5 test1 5 test2 5 test3 5 test4 5 test5'
>>> s = re.match(r'^\d+\s\d+\s?(.*)', s).group(1)
>>> print s
5 test1 5 test2 5 test3 5 test4 5 test5
>>> list = re.findall(r'\d+\s(\w+)', s)
>>> print list
['test1', 'test2', 'test3', 'test4', 'test5']
. 해결책
나는 그것이 가능하다고 믿지 않는다.regexes는 주어진 정규 표현식에서 캡처를 괄호로 쌍을 짝을 짝을 짝을 짝을 짝을 짝을 짝을 짝을 짝을 짝을 짝을 지정합니다. '((\ w +) \ s +) {0,99}'만큼 반복적으로 캡처 할 것입니다.두 번째 그룹 ... 각 경기가 발견 된 새 그룹을 만들지 마십시오.
스플릿을 사용할 수 있지만 한 문자 값에서만 공백과 같은 문자가 아닌 하나의 문자 값에만 분할됩니다.
대신 정규 표현식에서 분할 할 수있는 re.split을 사용할 수 있으며 공백을 일치시킬 수 있습니다.당신은 아마 '\ s +'와 일치하도록 원합니다.
>>> import re
>>> help(re.split)
Help on function split in module re:
split(pattern, string, maxsplit=0)
Split the source string by the occurrences of the pattern,
returning a list containing the resulting substrings.
>>> re.split('\s+', 'The quick brown\t fox')
['The', 'quick', 'brown', 'fox']
>>>
. 다른 팁
모듈 RE
에서 함수 findAll을 사용할 수도 있습니다.import re
>>> re.findall("\w+", "The quick brown fox")
['The', 'quick', 'brown', 'fox']
. 왜 string.split
똑같은 일을 할 때 regex를 사용하는 이유는 무엇입니까?
>>> "The quick brown fox".split()
['The', 'quick', 'brown', 'fox']
. 정규 표현식은 알 수없는 그룹 수로 그룹화 할 수 없습니다.그러나 귀하의 경우에 희망이 있습니다.'분할'방법을 살펴보십시오. 귀하의 경우에 도움이되어야합니다.