2017-02-08 160 views
0

我不使用或執行很多文本搜索,但一直未能找到答案,即正則表達式用於查找以T開頭並以T結尾的所有單詞從每個單詞在換行符上的文本文件開始。嘗試了一些來自搜索的建議;以下查找以T開頭的所有單詞以及下一個T出現的位置。但是,我想知道最後一個字母T的位置,不管T之間有多少T。道歉,如果這實際上是微不足道的,但每個組合後,我可以找到我沒有結果。我不確定爲什麼r'^T.*T$'不起作用。使用Python正則表達式查找以特定字母開頭和結尾的單詞

with open('/Users/../words.txt') as f: 
    passage = f.read() 
words = re.findall(r'T.+T', passage) 
print(words) 
+0

@ DeepSpace,好吧,我排除了TT,但如果你喜歡德國車,可以匹配一些東西:) –

+0

你正在讀取整個文件到內存中?好的,所以你需要'words = re.findall(r'(?m)^ T. + T $',passage)' - 使用'^'和'$'使它們匹配*行的開始/結束*用'(?m)'修飾符。 –

+0

@WiktorStribiżew感謝您向我展示如何解決我所瞭解的問題,即匹配到線路。 –

回答

3

我使用表達式:

re.findall(r"\bT\w*?T\b",s)) 
  • 使用單詞邊界
  • 使用\w任何數字,以避免在使用
  • 之間
  • 「非貪婪」模式匹配空間(也許這裏沒有多大用處的,因爲單詞邊界已經做的工作​​)
+0

感謝 - \ bT。* T \ b也似乎工作。感謝這個答案;正如評論中指出的那樣,我懷疑^ ... $ combo會在線路退回時被絆倒。 –

+0

不,''*'會跳過任何非單詞字符。這似乎工作,如果你有每行一個單詞,但發佈的解決方案更一般。 – tripleee

2

使用單詞邊界錨\b和非空白字符\S

words = re.findall(r'\bT\S+T\b', passage) 

這也將允許這樣的話作爲匹配Trust-TesTTough&FasT

相關問題