python - 以 t 开头但以 e 以外的其他词结尾的单词

标签 python python-3.x regex python-re

我正在尝试创建一个以 t 或 T 开头且不以 e 字母结尾的正则表达式。到目前为止,我尝试了下面的代码,但它没有给我理想的结果。谁能告诉我这里到底缺少什么?

my_str = my_file.read()

word = re.findall("[tT].*[^e]$", my_str)

print(word)

最佳答案

你可以使用

\bt(?:[a-z]*[a-df-z])?\b
\bt[a-z]*\b(?<!e)

为了完整起见,下面是一个正则表达式,用于匹配以西里尔字母 т 开头且不以西里尔字母 е 结尾的任何单词:

\bт[^\W\d_]*\b(?<!е)

请参阅 regex demo #1regex demo #2Cyrillic regex demo

如果您需要不区分大小写的匹配,请添加 re.I:

re.findall(r'\bt(?:[a-z]*[a-df-z])?\b', text, re.I)

关于单词边界的说明:如果单词可以粘贴到 _ 或数字,请使用字母边界而不是单词边界:

r'(?<![a-z])t(?:[a-z]*[a-df-z])?(?![a-z])'
r'(?<![^\W\d_])т[^\W\d_]*(?![^\W\d_])(?<!е)' # Unicode letter boundaries

正则表达式详细信息

  • \b - 单词边界(字符串的开头或紧接在数字、字母、下划线之外的字符之后的位置)
  • (?<![a-z])((?<![^\W\d_]) 是 Unicode 识别的等效项)- 与前面没有紧接字母的位置匹配的负向后查找
  • t - 一封 t 封信
  • (?:[a-z]*[a-df-z])? - 可选的非捕获组,匹配 0 个或多个字母,然后匹配除 e 之外的字母
  • \b - 字边界
  • (?![a-z])((?![^\W\d_]) 是 Unicode 识别的等效项)- 与后面没有紧跟字母的位置匹配的否定前瞻。

另外,

  • \bt[a-z]*\b(?<!e) 匹配单词边界、 t 、任何零个或多个小写 ASCII 字母(带有 re.I 的任何 ASCII 字母),然后单词边界标记单词的结尾,并且否定后向查找 (?<!e) 失败如果单词末尾有 e,则匹配
  • [^\W\d_]* - 匹配零个或多个 Unicode 字母。

请参阅a Python demo:

import re
text = r't, train => main,teene!'
cyr_text = r'таня  тане  работе'
print( re.findall(r'\bt(?:[a-z]*[a-df-z])?\b', text, re.I) )
# => ['t', 'train']
print( re.findall(r'\bt[a-z]*\b(?<!e)', text, re.I) )
# => ['t', 'train']
print( re.findall(r'\bт[^\W\d_]*\b(?<!е)', cyr_text, re.I) )
# => ['таня']
print( re.findall(r'(?<![^\W\d_])т[^\W\d_]*(?![^\W\d_])(?<!е)', cyr_text, re.I) )
# => ['таня']

关于python - 以 t 开头但以 e 以外的其他词结尾的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64818532/

相关文章:

Python获取文件名并更改并将其保存在变量中

python - 有没有一种方法可以处理 Blob 存储中的 PDF 文件,而无需使用 Python 将它们下载到本地?

python - Python 3类型注释和子类

javascript - 如何在 javascript 中正则表达式一组字符? (\/)

php - 在文件夹中使用 .htaccess 隐藏查询字符串

regex - Azure 数据工厂是否支持正则表达式匹配?

python - 防止 x 轴标签在 matplotlib/pyplot 中被截断

python - 使用 '\' 在正则表达式中匹配特殊字符 '\\' 时出现问题

python - 是否可以在 pytest 中并行执行相同的测试?

python - 基于每日时间序列数据框创建工作日/周末时间序列数据框