正则表达式,用于查找带有下划线和可选扩展名的文件



这是为了工作,所以我更改了扩展名和文件以保护无辜者。

我正在分析描述中的文本,以查找格式为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-Zd]+_w+(?:.(?:py|mat))?

RegEx演示

RegEx详细信息:

  • [a-zA-Zd]+:匹配1+个字母或数字
  • _:匹配下划线
  • w+:匹配1个以上单词字符
  • (?:.(?:py|mat))?:可选匹配.py.mat

这就是您想要的吗?

|?s*([wd]+[_wd]+(?:.?[wd]+[_wd]+)+)s*|?

最新更新