2014-11-28 2 views
1

파이썬에 대한 질문이 있습니다. | 연산자 :파이썬 정규식, OR 사용

다음 일반 표현식을 사용하여 하나 이상의 문자를 | 나는 1 문자 옵션을 사용하는 경우도

>>> ps = "^[23|45]" 
>>> p = re.compile(ps) 
>>> p.match("23") 
<_sre.SRE_Match object at 0x0000000001EE0370> 

, 나는 끝의 문자열 기호를 추가 할 수 있습니다 : 운영자는 예상 된 결과를 제공 | :

>>> ps = "^[2|4]$" 
>>> p = re.compile(ps) 
>>> p.match("2\n") 
<_sre.SRE_Match object at 0x0000000001EE0440> 

을하지만 다중 사용하려고하면 문자 옵션 | 또한

>>> ps = "^[23|45]$" 
>>> p = re.compile(ps) 
>>> p.match("23\n") 
>>> ps = "^[2|4]$" 

, 나는 -method 대신 "일치"의 "검색"대신 "$"의 "\ n을"문자를 사용했지만,에 : 나는 경기를 예상 어디 일치하지 않습니다 아무 소용이. 마지막 정규 표현식을 어떻게 만들 수 있습니까? 에서는

+0

사용 http://regex101.com/ 및 http://jdownloader.org/_media/knowledge/wiki/gui/settings0.7/regular-expressions-cheat-sheet-v2.png?w= 650 & h = 883 – madzohan

답변

0

| [] 내부 [23 45] | 쓸모가 대신 or 연산자 | palceholder위한 역할을한다. 대신 (?:23|45)을 사용하십시오. 또한 [23]2, 3과 일치합니다. 문자 클래스 내부에서는 문제가 없습니다. 문자 클래스 (당신이 일치을받지 않습니다 ^[23|45]$ 사용 .if 여기에만 2 일치) [23|45] 그렇게 2 or 3\n는 문자 클래스에없는 것처럼 .Third가 일치하지 않습니다 일치와 같이

frst 예를 작동합니다.

+0

환상적입니다. 첫 번째 예제가 어떻게 작동합니까? – Bartm85

+1

'[23]'은 (는) '23'과 (와) 일치하지 않습니다. 그것은'2'와'3'을 따로 따로 매치 할 것이지만,'23'을 함께 매치하지 않을 것입니다. group (0) == "2"' – BluePeppers

+0

@BluePeppers 나는 그것을'()'에 이미 언급했다 – vks

1

^[23|45]$은 주어진 목록의 단일 문자와 일치합니다. 즉 2 또는 3 또는 | 또는 4 또는 5과 일치합니다. 앵커는 라인에는 문자가 하나만 있어야한다고 주장합니다. 그래서 이것은 내가 전에 언급 한 한 문자 만있는 모든 줄과 일치합니다.

또한 \n 문자 앞에 $이 존재합니다. 그래서이 re.match(r'^[2|3]$', '2\n')은 당신에게 경기를 보여줍니다. ^가 주어진 목록에서 [23|45]는 한 문자와 앵커를 시작하기 때문에

>>> ps = "^[23|45]" 
>>> p = re.compile(ps) 
>>> p.match("23") 
<_sre.SRE_Match object at 0x0000000001EE0370> 

위의 코드는 당신에게 경기를 줄 것이다. 우리의 입력은 23 이었으므로 첫 번째 2과 일치합니다. 마지막으로 일치를 제공하며 전체 텍스트 23과 일치하지 않습니다. 문자열 23 또는 45과 일치 시키려면 문자 클래스가 아닌 캡쳐 또는 비 캡처 그룹에 패턴을 포함해야합니다.

r"^(23|45)$"