programing tip

정규식 일치 수

itbloger 2020. 12. 12. 10:12
반응형

정규식 일치 수


모듈 finditer기능을 사용하여 re일부 항목을 일치시키고 모든 것이 작동합니다.

이제 내가 얼마나 많은 성냥을 가지고 있는지 알아 내야합니다. 반복자를 두 번 반복하지 않고도 가능합니까? (수를 알아 낸 다음 실제 반복)

일부 코드 :

imageMatches = re.finditer("<img src\=\"(?P<path>[-/\w\.]+)\"", response[2])
# <Here I need to get the number of matches>
for imageMatch in imageMatches:
    doStuff

모든 것이 작동합니다. 루프 전에 일치 항목 수를 가져 오면됩니다.


모든 경기가 필요하다는 것을 알고 있다면 re.findall기능을 사용할 수 있습니다 . 모든 일치 항목의 목록을 반환합니다. 그런 다음 len(result)일치 수에 대해 할 수 있습니다 .


항상 길이를 알아야하고 다른 정보가 아닌 일치 내용 만 필요한 경우을 사용하는 것이 좋습니다 re.findall. 그렇지 않으면 가끔 길이 만 필요한 경우 다음을 사용할 수 있습니다.

matches = re.finditer(...)
...
matches = tuple(matches)

재사용 가능한 튜플에 일치의 반복을 저장합니다. 그럼 그냥하세요 len(matches).

또 다른 옵션은 일치 개체로 무엇이든 한 후 총 개수 만 알고 싶다면 다음을 사용하는 것입니다.

matches = enumerate(re.finditer(...))

(index, match)각 원래 일치에 대해 쌍을 반환합니다 . 따라서 각 튜플의 첫 번째 요소를 일부 변수에 저장할 수 있습니다.

그러나 우선 길이가 필요하고 문자열이 아닌 일치 객체가 필요한 경우 다음을 수행해야합니다.

matches = tuple(re.finditer(...))

을 고수해야하는 finditer()경우 반복기를 반복하는 동안 카운터를 사용하면됩니다.

예:

>>> from re import *
>>> pattern = compile(r'.ython')
>>> string = 'i like python jython and dython (whatever that is)'
>>> iterator = finditer(pattern, string)
>>> count = 0
>>> for match in iterator:
        count +=1
>>> count
3

finditer()(겹치는 인스턴스와 일치하지 않음) 의 기능이 필요한 경우이 방법을 사용하십시오.


#An example for counting matched groups
import re

pattern = re.compile(r'(\w+).(\d+).(\w+).(\w+)', re.IGNORECASE)
search_str = "My 11 Char String"

res = re.match(pattern, search_str)
print(len(res.groups())) # len = 4  
print (res.group(1) ) #My
print (res.group(2) ) #11
print (res.group(3) ) #Char
print (res.group(4) ) #String

목록 작성을 정말로 피하고 싶을 때 :

import re
import operator
from functools import reduce
count = reduce(operator.add, (1 for _ in re.finditer(my_pattern, my_string))) 

때로는 거대한 문자열로 작업해야 할 수도 있습니다. 도움이 될 수 있습니다.


I know this is a little old, but this but here is a concise function for counting regex patterns.

def regex_cnt(string, pattern):
    return len(re.findall(pattern, string))

string = 'abc123'

regex_cnt(string, '[0-9]')

참고URL : https://stackoverflow.com/questions/3895646/number-of-regex-matches

반응형