2017-02-08 159 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

相关问题