특정 정규식을 작동시키려고 노력했지만 필요한 작업을 수행할 수 없습니다.
기본적으로 ROCKET을 검색하고 싶습니다. 정규식은 대문자 또는 소문자, 구두점 유무에 관계없이 ROCKET과 일치해야 하지만 다른 단어의 일부인 경우에는 일치하지 않습니다. 따라서 정규 표현식은 다음 중 하나에서 실행됩니다.
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
하지만 다음과 같은 곳에서 ROCKET이 발견되면 트리거하지 마세요.
Rocketeer
Sprocket
온라인에서 정규식 생성기를 사용하여 올바른 결과를 얻으려고 노력했지만 정확하게 일치시킬 수는 없습니다.
답변1
북마크해 두는 것을 제안합니다MSDN 정규식 빠른 참조
영숫자가 아닌 문자로 둘러싸인 단어 "rocket"에 대해 대소문자를 구분하지 않고 일치시키려고 합니다. 작동하는 정규식은 다음과 같습니다.
\W*((?i)rocket(?-i))\W*
수행할 작업은 0개 이상의 (*) 영숫자가 아닌 문자(\W)를 찾은 다음 대소문자를 구분하지 않는 로켓 버전( (?i)rocket(?-i) )을 찾은 다음 다시 0개 이상의 문자( *) 영숫자가 아닌 문자(\W). 로켓 일치 용어 주위의 추가 괄호는 일치 항목을 별도의 그룹에 할당합니다. 따라서 단어 로켓은 일치 그룹 1에 속하게 됩니다.
업데이트 1:
Matt는 댓글에서 이 정규식은 Python에서 사용된다고 말했습니다. Python의 구문은 약간 다릅니다. Python에서 동일한 결과를 얻으려면 이 정규식을 사용하고 옵션을 or 함수 re.IGNORECASE
에 전달하세요 .compile
match
\W*(rocket)\W*
~에정규식101이는 정규식 입력 옆에 있는 텍스트 상자에 "i"를 입력하여 시뮬레이션할 수 있습니다.
업데이트 2Ismael은 정규식이 "1rocket1"과 일치할 수 있으므로 정확하지 않다고 언급했습니다. 그는 훨씬 더 나은 솔루션을 게시했습니다.
(?:^|\W)rocket(?:$|\W)
답변2
이 경우 미리보기가 과도하다고 생각하며 옵션과 함께 단어 경계를 사용하는 것이 더 나을 것입니다 ignorecase
.
\brocket\b
즉, 파이썬에서는 다음과 같습니다.
>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I) # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']
답변3
grep
및 를 사용하면 sed
을 사용할 수 있습니다 \<rocket\>
. 를 사용하면 옵션 grep
이 -i
대소문자를 구분하지 않게 됩니다(나대소문자 무시):
grep -i '\<rocket\>'
모든 정규 표현식에서 대소문자를 구분하지 않게 만드는 방법은 모르겠지만 sed
항상 원시인의 방식이 있습니다.
sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'
답변4
나는 당신이 원하는 단어를 구체적으로 지정하기 위해 다음과 같은 것을 사용할 수 있다고 생각합니다.
/^(rocket|RoCKEt)$/g