모든 그룹을 움켜 잡지 않고, 여러 분야에서 작동하지 않는 정규식

StackOverflow https://stackoverflow.com//questions/22071517

  •  23-12-2019
  •  | 
  •  

문제

나는 다음의 정규식 패턴을 가지고있다 :

pattern = r'''
        (?P<name>.+?)\n
        SKU\s#\s+(?P<sku_hidden>\d+)\n
        Quantity:\s+(?P<quantity>\d+)\n
        Gift\sWrap:\s+(?P<gift_wrap>.+?)\n
        Shipping\sMethod:.+?\n
        Price:.+?\n
        Total:\s+(?P<total_price>\$[\d.]+)
        '''  
.

다음을 사용하여 검색합니다.

re.finditer(pattern, plain, re.M | re.X)
.

아직 re.findall를 사용하는 것은 동일한 결과를 산출합니다.

다음과 같은 텍스트와 일치해야합니다 :

Red Retro Citrus Juicer
SKU # 403109
Quantity: 1
Gift Wrap: No
Shipping Method:Standard
Price: $24.99
Total: $24.99
.

일어나는 첫 번째 일은 re.Mre.X를 사용하는 것입니다. 작동하지 않지만 하나의 한 줄에 모두 넣으면됩니다.다른 것은 첫 번째 그룹만이 일할 때 나머지는 무시됩니다.어떤 생각은?

추가 정보 :

내 패턴을 바로 변경하면 :

pattern = r'''
        (?P<name>.+?)\n
        SKU\s#\s+(?P<sku_hidden>\d+)\n
        '''
.

내 출력은 다음과 같이 나옵니다. [u'Red Retro Citrus Juicer']가 일치하지만 SKU가 나타나지 않습니다.같은 줄에 모든 것을 넣으면 다음과 같이 :

pattern = r'(?P<name>.+?)\nSKU\s#\s+(?P<sku_hidden>\d+)\n' 
.

일치하고 모든 것을 잡습니다.

도움이 되었습니까?

해결책

X 플래그를 사용할 때는 댓글을 시작하는 #를 이스케이프해야합니다.

바로 지금 두 줄 정규 표현식은

와 같습니다.
(?P<name>.+?)\n
SKU\s
.

원하는 것은

pattern = r'''
    (?P<name>.+?)\n
    SKU\s\#\s+(?P<sku_hidden>\d+)\n
    Quantity:\s+(?P<quantity>\d+)\n
    Gift\sWrap:\s+(?P<gift_wrap>.+?)\n
    Shipping\sMethod:.+?\n
    Price:.+?\n
    Total:\s+(?P<total_price>\$[\d.]+)
    '''  
.

\#를 주목하십시오 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top