python - 正则表达式查找带有下划线和可选扩展名的文件
问题描述
这是为了工作,所以我更改了扩展名和文件以保护无辜者。
我正在从描述中解析文本,以查找格式为 word_here 的文件名,它可以根据需要包含任意数量的下划线以及可选的扩展名。我能够想出这个有效的正则表达式
测试 1
text = 'Some text here: * my_file_stuff.mat * other_file * third_file *'
FILE_REG_EX = r'([\w]+_+[\w]+\.*[py|mat]*)'
res = re.findall(FILE_REG_EX, text)
print(res)
输出 1
python test_regex.py
['my_file_stuff.mat', 'other_file', 'third_file']
问题是它不适用于这样的东西
测试 2
text = '|my_file|another_file.mat|O_HERES_ONE|_O_HERES_ANOTHER| | | |'
FILE_REG_EX = r'([\w]+_+[\w]+\.*[py|mat]*)'
res = re.findall(FILE_REG_EX, text)
print(res)
输出 2
python test_regex.py
['my_file|a', 'nother_file.mat|', 'O_HERES_ONE|', '_O_HERES_ANOTHER|']
我修改了我的正则表达式以包含竖线,这里
测试 3
text = '|my_file|another_file.mat|O_HERES_ONE|_O_HERES_ANOTHER| | | |'
FILE_REG_EX = r'([\w]+_+[\w]+\.*[py|plot]*)\|'
res = re.findall(FILE_REG_EX, text)
print(res)
输出 3
python test_regex.py
['my_file', 'another_file.mat', 'O_HERES_ONE', 'O_HERES_ANOTHER']
这适用于第二个,但现在不适用于第一个。部分问题是我将搜索文本描述以查找文件所在的位置,并且我无法知道它将用于文件的格式,只是它们将以 MY_FILE_HERE01.py 的形式出现有或没有扩展名。
我尝试使用 not 符号来排除前后的竖线,但这似乎对两个字符串都是空的。
解决方案
您可以将此正则表达式用于两种输入:
[a-zA-Z\d]+_\w+(?:\.(?:py|mat))?
正则表达式详细信息:
[a-zA-Z\d]+
: 匹配 1+ 个字母或数字_
: 匹配下划线\w+
: 匹配 1+ 个单词字符(?:\.(?:py|mat))?
:可选匹配.py
或.mat
推荐阅读
- terraform - 无效的模板控制关键字
- java - 如何在运行时使用 Oracle UCP 为 Tomcat 数据源添加用户名和密码
- machine-learning - 这可以预测彩票号码(不是最准确的)吗?
- python - 如何用groupby计算平均每周支出,每周是周一到周日?
- package - Julia 包添加(来自 github 的 zip 主文件)
- c# - Git忽略目录不适用于.vs目录
- django - 如何在共享或 VPS 主机上配置 Django 2.2.8 的设置
- java - Maven 多模块清理和构建失败
- selenium - 在 xpath selenium 中按确切文本搜索
- php - 使用 Laravel 6 和护照进行身份验证使用自定义字段和实体