, 나는 다음과 같은 문제가 발생했습니다 unsigned
을 지정하는 임의의 순서로,정규식에서 OR 연산자 (|)를 사용하여 정렬되지 않은 부분 문자열을 일치시킬 필요가 있습니까? C 프로그래밍 언어 파이썬에서 어휘 분석을 실행하는 경우
정수 유형이 u
(U
)로 종료 할 수 l
(L
) 수정 또는 둘 또는 long
정수 유형입니다. 우리가 여기에서 볼 수 있듯이
'''Dec'''
r'\b([1-9][0-9]*)[uU]?[lL]?\b|\b([1-9][0-9]*)[lL][uU]\b'
'''Oct'''
r'\b0[0-7]*[uU]?[lL]?\b|\b0[0-7]*[lL][uU]\b'
'''hex'''
r'\b0[xX][a-fA-F0-9]+[uU]?[lL]?|\b0[xX][a-fA-F0-9]+[lL]?[uU]?'
은 모두 순서 ul
에 u
및 l
수정에 맞게 :
입니다 또는 lu
(대문자 또는 소문자), OR 연산자 |
을 정규 표현식에 써야하고이 두 조건을 처리하기 위해 다른 부분을 반복해야합니다.
두 개의 순서가없는 부분을 반복하지 않고 일치시키는 정규식을 작성하는 간단한 방법이 있습니까?
실제로 괄호를 사용하는 것이 훨씬 더 우아하지만, 정렬되지 않은 일치에 OR 연산자 (|)가 필요한지 궁금합니다. 범용적이고 보편적이기 위해서는 서로 다른 패턴을 일치시키는 두 가지 순서로 정규식을 작성해야합니까? –
정규식은 "정렬되지 않은 일치"를 실제로 지원하지 않습니다. 그건 그들이 근본적으로 일하는 방식이 아닙니다. 앞을 내다 보면서 이것을 달성 할 수는 있지만 그 결과는 오히려 추한 것입니다. '(? = [^ l] * l? [^ l] * \ b) (? = [^ u] * u? [^ u]]와 같이 대체 할 수 있습니다. * \ b) [lu] *'. –
'(lu | u? l?)'은 솔직히 말해서 문제를 해결할 수있는 아주 간단하고 우아한 해결책이라고 생각합니다! –