누군가 파이썬의 이상한 행동을 설명 할 수 있습니까? 분명히 'test'라는 문자열에는 '입찰'또는 '묻기'가 포함되지 않습니다. 이 일치하는 이유는 무엇입니까?이 파이썬이 왜 다시 일치합니까?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 와 일치하는!
누군가 파이썬의 이상한 행동을 설명 할 수 있습니까? 분명히 'test'라는 문자열에는 '입찰'또는 '묻기'가 포함되지 않습니다. 이 일치하는 이유는 무엇입니까?이 파이썬이 왜 다시 일치합니까?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 와 일치하는!
[...]
내부에 나열된 모든 문자와 일치하는 문자 클래스를 정의합니다. 원하는 것은 par = r'(Bid|Ask)'
입니다.
그러나 할 모든에서 이것에 대한 정규식을 사용하지 말아야 대신 다음
if whatever in ('Bid', 'Ask'):
# it's one of these two
else:
# it isn't
당신이 문자열 검사 (감사 @agf)을 수행해야하는 경우 :
if any(word in whatever for word in ('Bid', 'Ask')):
# one of the words is in the sting whatever
정규식은 단순히 'B', 'i', 'd', '|', 'A', 's'및 'k'문자가 포함 된 문자 집합입니다. '테스트'에는 's'가 있습니다. 아마 당신은 무엇을 의미
는 "(입찰 | 질문)"이었다[...]
은 character class matcher입니다. 이는 세트의 모든 문자와 일치 함을 의미합니다.
r'(Bid|Ask)'
과 같이 번갈아 사용할 수도 있습니다.
괄호는 필요 없다. – rplnt
[]
대신 ()
이 필요하다고 생각합니다. 그룹 Bid|Ask
의 모든 단일 문자와 일치하도록 입력했으며 문자열에는 s
이 포함되어 있습니다.
(문자열에 * d *가 아닌 * s *가 포함되어 있습니다.) – kojiro
@kojiro, 감사합니다 - 입력이 아닌 출력 문자열을보고있었습니다! –
정규 표현식이 B, i, d, |, A, s, k 문자 집합을 검색 중입니다. 's'는 'test'내부에서 일치합니다.
대괄호는 생략해야합니다.
또한 "Askify"와 같은 문자열을 일치시키지 않으려면 정규식을 조금 더 구체화해야합니다.
+1 빠르고 정규식을 필요로하지 않고 더 나은 방법을 제안합니다. – birryree
또는 부분 문자열 일치를 허용할지 여부에 따라'any (단어 'Bid', 'Ask'))의 단어가 포함될 수 있습니다. – agf
아. 감사. 사실, 나는 Bid 나 Ask가 포함 된 라인을 매치 할 필요가있다. 그래서 나는 여전히 re를 사용할 필요가 있다고 생각한다. – Dave31415