2012-10-16 3 views
1

주어진 파일에서 *로 시작하는 모든 줄을 제거하고 싶습니다. 그래서 예를 들어, 다음Regex + Python - a로 시작하는 모든 줄 제거 *

* This needs to be gone 
But this line should stay 
*remove 
* this too 
End 

이 발생해야 :

But this line should stay 
End 

은 내가 궁극적으로해야 할 것은 다음

  1. 괄호 안에 모든 텍스트를 제거하고 대괄호 (괄호/괄호 포함),
  2. 위에서 언급 한 바와 같이 li nes는 ''로 시작합니다.

지금까지 # 1을 다음 주소로 지정할 수있었습니다 : re.sub(r'[.?]|(.*?)', '', fileString). 나는


해결 방법 1 (아무 정규식)

>>> f = open('path/to/file.txt', 'r') 
>>> [n for n in f.readlines() if not n.startswith('*')] 

해결 방법 2 (정규식)

싶지 않지만 항상 일을 제거 결국 # 2에 대한 몇 가지 시도
>>> s = re.sub(r'(?m)^\*.*\n?', '', s) 

도움을 주신 모든 분들께 감사드립니다.

+4

그래서 지금까지 무엇을 생각해 냈습니까? – kaveman

+0

궁극적으로해야 할 일은 다음과 같습니다. 1 - 괄호 안의 모든 텍스트를 제거하고 (괄호/괄호 포함), 2 - 위에서 언급 한 바와 같이 \ *로 시작하는 줄을 제거하십시오. 지금까지 나는 re.sub (r '\ [. *? \] | \ (. *? \)', '', fileString)와 함께 # 1을 처리 할 수있었습니다. 나는 # 2를 위해 여러 가지를 시도했지만 항상 원하지 않는 것들을 제거했다. –

+1

나는 그것을 쉽게 읽을 수 있도록 질문에 옮겼습니다. 간단한 것들을 위해, 당신은 regex를 사용하는 것을 피할 수 있고, 내장 된 str 메소드를 사용할 수 있습니다 :'if not line.lstrip(). startswith ('*')' –

답변

1

정규식이 필요하지 않습니다.

text = file.split('\n') # split everything into lines. 

for line in text: 
    # do something here 

도움이 더 필요하면 알려주세요.

1

여기에 더 많은 정보를 제공해야합니다. 최소한 사용중인 파이썬 버전과 코드 스 니펫. 하지만 정규식이 필요한 이유는 무엇입니까? 나는 왜 당신이 startswith를 사용할 수 없는지 알지 못합니다. 파이썬 2.7.3와 나를 위해

다음 작품 정규식을 사용하여

s = '* this line gotta go!!!' 
print s.startswith('*') 

>>>True 
+0

2.7.3. 제안 주셔서 감사합니다, 나는 그것을 시도합니다. –

+1

@EveraldoAguiar는 StackOverflow에 오신 것을 환영합니다! 그리고 아무런 문제도 없습니다 - 여러 번 내 질문에 대해 동일한 제안을했습니다. 일반적으로 가능한 한 구체적인 질문으로 시도하는 것이 좋습니다. 그리고 시도한 코드 스 니펫을 게시하십시오. 오류가 발생하면이를 포함 시키십시오. 그리고 파이썬에서는 보통 3.x 버전과 이전 버전간에 상당한 차이가 있으므로 사용중인 버전을 포함시키는 것이 좋습니다. 그러나 계속 질문하십시오. 나는 당신이 공동체가 시도하고 도우려는 것을 매우 기꺼이 발견 할 것이라고 생각합니다. –

1
>>> f = open('path/to/file.txt', 'r') 
>>> [n for n in f.readlines() if not n.startswith('*')] 
['But this line should stay\n', 'End\n'] 
+0

이것은 트릭을 매우 멋지게 만들었습니다. 제안 해 주셔서 감사합니다! –

4

>>

s = re.sub(r'(?m)^\*.*\n?', '', s) 

확인 this demo.

+0

위대한 작품! 감사! –