Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python正则表达式查找以特定字母开头和结尾的单词_Python_Regex - Fatal编程技术网

使用Python正则表达式查找以特定字母开头和结尾的单词

使用Python正则表达式查找以特定字母开头和结尾的单词,python,regex,Python,Regex,我不使用或不做太多文本搜索,但无法找到一个答案,即正则表达式是如何从一个文本文件中查找以t开头、以t结尾的所有单词,其中每个单词都位于换行符上。从搜索中尝试了一些建议;下面查找以T开头的所有单词,以及下一个出现T的位置。然而,我想找出最后一个字母是T的位置,不管这两个字母之间出现了多少个T。道歉,如果这实际上是微不足道的,但在每次组合后,我可以发现我没有结果。我不确定为什么r'^T.*T$'不起作用 with open('/Users/../words.txt') as f: passa

我不使用或不做太多文本搜索,但无法找到一个答案,即正则表达式是如何从一个文本文件中查找以t开头、以t结尾的所有单词,其中每个单词都位于换行符上。从搜索中尝试了一些建议;下面查找以T开头的所有单词,以及下一个出现T的位置。然而,我想找出最后一个字母是T的位置,不管这两个字母之间出现了多少个T。道歉,如果这实际上是微不足道的,但在每次组合后,我可以发现我没有结果。我不确定为什么
r'^T.*T$'
不起作用

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

使用单词边界锚定符
\b
和非空白字符
\S

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

这也将允许匹配诸如
信任测试
艰难和快速
等词。

我将使用该表达式:

re.findall(r"\bT\w*?T\b",s))
  • 使用单词边界
  • 使用任意数量的
    \w
    以避免两者之间的空格匹配
  • 使用“非贪婪”模式(这里可能没有那么有用,因为word boundary已经完成了这项工作)

@DeepSpace,好吧,我排除了TT,但如果你喜欢能匹配某些东西的德国车:)你正在将整个文件读入内存?好的,所以你需要
words=re.findall(r'(?m)^T.+T$',passage)
-使用
^
$
使它们与
(?m)
修饰符匹配。@WiktorStribiż谢谢你告诉我如何解决我所理解的问题,我不明白为什么对合法的问题会投反对票。Grrr.谢谢--\bT.*T\b似乎也有效。谢谢你的回答;我怀疑^…$combo在返回行时出错,如注释中所述。否,
*
将跳过任何非单词字符。如果每行只有一个单词,这似乎是可行的,但发布的解决方案更为通用。