python - 如何精确匹配模式?

标签 python regex

我有一个像这样的文件列表:aaa.txt bbb.doc ccc.gjf ddd.exe。我想要扩展名为 gjf 的文件。由于某些原因,该文件不能是文件列表中的第一个或最后一个文件。也就是说,文件前后必须有一个空格。 然而我尝试了很多正则表达式都无法获取到文件:

pattern = re.compile(r'\s+(.*?gjf) ')
print pattern.findall('aaa.txt bbb.doc ccc.gjf ddd.exe')
result: ['bbb.doc ccc.gjf']
pattern = re.compile(r' (.*?gjf) ')
print pattern.findall('aaa.txt bbb.doc ccc.gjf ddd.exe')
result: ['bbb.doc ccc.gjf']

我该怎么办?

最佳答案

我认为正则表达式对于这个问题来说并不是完全必要的:

s = 'aaa.txt bbb.doc ccc.gjf ddd.exe'
final_data = [i for i in s.split()[1:-1] if i.endswith('.gjf')]

输出:

['ccc.gjf']

但是,如果您确实需要正则表达式,您可以尝试以下操作:

import re
s = 'aaa.txt eee.gjf bbb.doc ccc.gjf ddd.exe'
final_data = re.findall("(?<!^)[a-zA-Z0-9]+\.gjf(?!$)", s)

输出:

['eee.gjf', 'ccc.gjf']

关于python - 如何精确匹配模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46586914/

相关文章:

python - 从列表中删除重复的连续元组?

javascript - 用户定义的正则表达式安全问题

可选包装器的 JavaScript RegExp 和只有一个记住的部分?

python - 为什么 python 字符串和元组是不可变的?

python - 将数据移动到制表符分隔的文件python

Python 网络抓取线程性能

python - pyqtgraph 从 PyQt4 小部件中的 API 导出失败/崩溃 python

javascript - 正则表达式惰性模式无法按预期工作

java - 使用正则表达式验证 mysql 语句

Java:匹配具有未知字符的字符串的算法