특정 단어와 일치하는 정규식을 작성하려면 어떻게해야합니까?


21

특정 정규식을 작동 시키려고 노력했지만 필요한 작업을 수행 할 수 없습니다.

기본적으로 ROCKET을 찾고 싶습니다. 정규식은 대문자 또는 소문자로 구두점을 사용하거나 사용하지 않고 ROCKET과 일치해야하지만 다른 단어의 일부는 아닙니다. 따라서 정규 표현식은 다음 중 하나를 트리거합니다.

rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine

그러나 ROCKET이 다음과 같은 경우에는 트리거되지 않습니다.

Rocketeer
Sprocket

온라인 정규식 생성기를 사용하여 올바르게 만들려고했지만 정확하게 일치시킬 수는 없습니다.


1
질문이 스택 오버플로에 더 적합한 경우는 드문 경우입니다. 각 언어마다 고유 한 특성이 있으므로 언어 ​​및 / 또는 플랫폼을 제공하십시오. 예를 들어, Windows입니다. .Net 및 Regex 클래스 . (일반적으로 그 반대입니다. 스택 오버플로는 수퍼 유저에게 더 적합한 개발자로부터 수백 가지의 주제를 벗어난 질문을받습니다).
— jww

답변:


14

MSDN 정규식 빠른 참조를 책갈피로 지정하는 것이 좋습니다.

영숫자가 아닌 문자로 둘러싸인 "rocket"이라는 단어는 대소 문자를 구분하지 않고 일치 시키려고합니다. 작동하는 정규식은 다음과 같습니다.

\W*((?i)rocket(?-i))\W*

영숫자가 아닌 (\ W) 문자를 찾은 다음 대소 문자를 구분하지 않는 버전의 로켓 ((? i) rocket (?-i))을 찾은 다음 다시 0 이상 ( *) 영숫자가 아닌 문자 (\ W). 로켓 일치 용어 주위의 추가 괄호는 일치를 별도의 그룹에 할당합니다. 로켓이라는 단어는 일치 그룹 1에있게됩니다.

업데이트 1 : Matt 은이 정규 표현식이 파이썬에서 사용될 것이라고 의견에 말했습니다. 파이썬은 약간 다른 문법을 가지고 있습니다. 파이썬에서 동일한 결과를 얻으려면이 정규 표현식을 사용하고 re.IGNORECASE옵션을 compile또는 match함수에 전달하십시오 .

\W*(rocket)\W*

일 Regex101 이는 "I"텍스트 박스 옆 정규식 입력에 입력하여 시뮬레이션 할 수있다.

업데이트 2 Ismael은 "1rocket1"과 일치 할 수 있기 때문에 정규 표현식이 정확하지 않다고 언급했습니다. 그는 훨씬 더 나은 해결책, 즉

(?:^|\W)rocket(?:$|\W)


1
온라인 정규 표현식 테스터 ( 예 : regex101.com) 로 이것을 테스트하면 입력 한 예제 문자열이 유효하지 않고 일치하지 않는 것으로 표시됩니다. 이것은 파이썬 스크립트의 일부로 사용됩니다. 그것이 어떻게 작성되어야합니까?
— Kefka

1
그렇습니다. 당신은 regex101.com에서 왼쪽 상단에서 정규식 "맛"을 선택할 수 있다는 것을 알 수 있습니다. 파이썬은 약간 다릅니다. 나는 파이썬과 동등한 것으로 대답을 업데이트 할 것입니다.
— Xaser

1
감사. 정규 표현식은 기본적으로 언어 독립적이라고 생각했습니다.
— Kefka

1
그것들은되어야하지만, 약간의 구현 차이가 존재합니다.
— Xaser

2
그리고 \W*(rocket)\W*일치 lrocketl합니다. 그것은해야 (?:^|\W)(rocket)(?:$|\W)합니다 (없이 *당신은 문자열의 시작 및 / 또는 끝과 일치하는지 확인해야합니다).
— Ismael Miguel

10

이 경우 미리보기가 과도하다고 생각하며 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']

기술적으로 캡처하지 않은 그룹은 대안이 아니지만 / b 옵션은 Ismael의 솔루션과 동일한 결과를 나타내지 만 조금 더 우아 할 수 있습니다.
— Xaser

1

로 grep하고 sed, 당신은 사용할 수 있습니다 \<rocket\>. 으로 grep의 -i옵션은 그것을 대소 문자를 구별를 (만들 것입니다 내가 사건을 gnore) :

grep -i '\<rocket\>'

모든 sed정규 표현식을 대소 문자를 구분하지 않는 방법으로 알지 못하지만 항상 원시인 방법이 있습니다.

sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'

0

전체 단어 만 검색 옵션을 사용하십시오.

문장 부호까지는 풍미 / 맛을 알 때까지는 대답 할 수 없습니다.

매우 오래된 스레드이므로 나중에 필요로 방문 할 수있는 사람을 위해 게시되었습니다. 실을 만든 사람들이 다른 곳으로 옮겼을 수도 있습니다.


또는 무엇을 whole words only option사용 grep하고 php있습니까? 죄송하지만 귀하의 답변은 다른 답변과 비교하여 부가 가치를 제공하지 않습니다.
— Toto
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.