2012-03-01 3 views
0

저는 파이썬을 사용하여 CSV 파일에서 엑셀 파일을 만듭니다. 나는 세포의 데이터가 "="로 시작하여 엑셀의 함수로 인쇄한다면 어디로 가려고 노력하고있다. 그러나 나는 어떤 행운이 없다. 문자열에 정규식을 수행하여 "="로 시작하는지 알았지 만 작동하지 않습니다. 다음은 지금까지 파이썬에서 가지고있는 것입니다 :파이썬에서 정규식을 수행하려면 어떻게해야합니까?

import xlwt 
import re 

string = '=HYPERLINK("http://www.google.com";"Google")' 

if re.match("^=", string) == True: 
    formData = re.sub('=', '', string) 
    sheet.write(row_count,col-1, Formula("'" + formDta + "'"),style) 

잘못된 접근법인가요, 아니면 잘못된 구문인가요? 내가 어떻게이 일을 할 수 있는지에 대한 제안?

답변

1

정말이 정규식이 필요하지 않습니다. 같은 것 : if string.startswith('='): do something 괜찮을 것이다.

파이썬은 두 개의 서로 다른 원시 정규 표현식을 기반으로 작업을 제공합니다 : 말했다

, 여기에 Python documentation for the re module에서 발췌 한 것입니다 만 문자열의 시작 부분에 일치 일치 검사를하는 동안 경기에 대한 검색 확인 문자열 내의 아무 곳이나 (이것은 기본적으로 Perl이 수행합니다). 당신이 re.match()를 사용하는 경우 ^ 시작의 라인 앵커가 필요하지 않다고 말을하는 것입니다

.

편집 : @aix는 re.match()의 동작에 대한 올바른 - 그것은 단지 전체 라인에 패턴과 일치하는 것입니다 코드가 작동하지 않는 이유는 re.match()을한다는 것입니다

0
s = '=HYPERLINK("http://www.google.com";"Google")' 

if s.startswith('='): 
    ... 

(그 일부가 아닌.) 전체 입력 문자열이 정규식과 일치하는 경우에만 True을 반환합니다. 귀하의 경우에는 첫 번째 문자 만합니다. re.search()을 사용하거나 으로 정규식을 변경할 수 있습니다. 그러나 나는 startswith()이 더 나은 접근 방법이라고 생각합니다.

P. 표준 string 모듈을 섀도 잉하지 않도록 변수의 이름을 변경했습니다.

1

문제는 True과 비교하는 것입니다. 파이썬의 True은 부울 객체입니다. re.match()match 개체를 반환합니다. 파이썬이 두 함수를 비교할 때 유형이 일치하지 않으며 if 테스트가 실패합니다.

if re.match(regexp, string): 

파이썬은 ifwhile 테스트의 목적을 위해, 참으로 가장 비 False, 비 None 값을 취급 :

파이썬에서 정규 표현식 테스트를 수행하는 관용적 인 방법으로합니다. 위 코드는 그 동작을 사용합니다. 정규 표현식이 일치하면 match 객체가 반환되고 테스트가 통과합니다. 정규식이 일치하지 않으면 None이 반환되고 테스트가 실패합니다.

관련 문제