문제

'run'으로 시작하고 '.py'의 파일 이름 확장자가있는 문자열 (이 경우 파일 이름)을 일치시키는 정규 표현식은 무엇입니까?

정규 표현식은 다음과 일치해야합니다.

RunFoo.py
RunBar.py
Run42.py

일치하지 않아야합니다.

myRunFoo.py
RunBar.py1
Run42.txt

내가 찾고있는 것과 동등한 SQL은 ... LIKE 'Run%.py' ....

도움이 되었습니까?

해결책

정규 표현을 위해 다음을 사용합니다.

re.match(r'Run.*\.py$')

빠른 설명 :

  • . 모든 캐릭터와 일치하는 것을 의미합니다.
  • * 이전 캐릭터의 반복을 의미하는 것을 의미합니다 (따라서* 모든 숯을 의미합니다)
  • 는 명백한 점을 피하기위한 탈출입니다
  • $는 "문자열의 끝"을 나타내므로 "run_foo.py.txt"와 일치하지 않습니다.

그러나이 작업의 경우 간단한 문자열 메소드를 사용하는 것이 좋습니다. 즉.

filename.startswith("Run") and filename.endswith(".py")

참고 : Case Insensitivity (예 : "run.py"와 "run.py"일치하는 경우 Re.i 옵션을 정규 표현식으로 사용하거나 특정 사례로 변환하십시오 (예 : Filename.lower ()). 문자열 메소드를 사용하기 전에.

다른 팁

경고:

  • JobScry의 답변 ( "^run.?
  • Orlandu63의 답변 ( "/^run= W]?

(저는 언급 할 명성이 충분하지 않습니다. 죄송합니다.)

나는 왜 당신 이이 '문제'를 해결하기 위해 정기적 인 표현을하고 있는지 정말로 이해하지 못합니다. 당신은 'run'으로 시작하는 모든 .py 파일을 찾는 방법을 끝내고 있습니다. 따라서 이것은 정기적 인 표현식을 컴파일하지 않고 작동하는 간단한 솔루션입니다.

import os
for filename in os.listdir(dirname):
    root, ext = os.path.splitext(filename)
    if root.startswith('Run') and ext == '.py':
        print filename
/^Run.*\.py$/

또는 구체적으로 파이썬에서 :

import re
re.match(r"^Run.*\.py$", stringtocheck)

이것은 "runfoobar.py"와 일치하지만 "runfoobar.py"는 아닙니다. 대신 대신에 둔감하게 만들기 위해 사용하십시오.

re.match(r"^Run.*\.py$", stringtocheck, re.I)

정규 표현이 필요하지 않으며 Glob를 사용할 수 있으며, 이는 와일드 카드를 사용합니다.

예를 들어, 해당 파일을 현재 디렉토리에 가져 오려면 ...

import os, glob
files = glob.glob( "".join([ os.getcwd(), "\\Run*.py"]) )

약간 더 복잡한 정규 표현식을 작성하면 추가 기능을 얻을 수 있습니다. "run"과 ".py"사이의 비트를 추출하십시오.

>>> import re
>>> regex = '^Run(?P<name>.*)\.py$'
>>> m = re.match(regex, 'RunFoo.py')
>>> m.group('name')
'Foo'

(여분의 비트는 Rob Howard의 답변에서와 같이 '.*'를 제외한 괄호와 그들 사이의 모든 것입니다.

이것은 아마도 파일 이름 지정 표준을 완전히 준수하지는 않지만 여기서는 다음과 같습니다.

/^Run[\w]*?\.py$/

Mabye :

^Run.*\.py$

빠른 시도

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top