我试图在文件夹中的文件名中捕获两个特定的单词/字符序列。到目前为止,我在https://regex101.com/上提供了正确的输出,但在我正在使用的脚本中没有提供正确的输出。
这是我正在处理的文件名的类型:
Bjørn Stallaresvei s 10013.pdf或
Københavngaten 1 L. 8.pdf这就是我到目前为止想出的准则:
((?<=\s)[a-zA-Z\.]+(?=[\s0-9]+\.pdf))|((?<=\s)[0-9]+(?=.pdf))我试图在第一行's‘和' 10013’中捕获,其中's‘是标识符,10013是ID。
在第二行中,L是标识符,8是ID。
这只是一个示例代码,可以显示:
import re
string_1 = "Stallaresvei s 10013.pdf"
regexp = r"(((?<=\s)[a-zA-Z\.]+(?=[\s0-9]+\.pdf))|((?<=\s)[0-9]+(?=.pdf)))"
m = re.search(regexp, string_1)
print(m)输出只显示找到的一个匹配:
<_sre.SRE_Match object; span=(13, 14), match='s'>发布于 2016-12-20 12:17:20
您可以删除捕获括号,并在re.findall中使用正则表达式。
r'(?<=\s)[a-zA-Z.]+(?=[\s0-9]+\.pdf)|(?<=\s)[0-9]+(?=\.pdf)'import re
string_1 = "Stallaresvei s 10013.pdf"
regexp = r"(?<=\s)[a-zA-Z.]+(?=[\s0-9]+\.pdf)|(?<=\s)[0-9]+(?=\.pdf)"
m = re.findall(regexp, string_1)
print(m) # => ['s', '10013']另一种方法是重写模式并将这些位捕获成两个组,请参阅另一个演示
import re
string_1 = "Stallaresvei s 10013.pdf"
regexp = r"\s([a-zA-Z.]+)\s+([0-9]+)\.pdf"
m = re.search(regexp, string_1)
if m:
print([m.group(1), m.group(2)])这里,
\s -匹配空格([a-zA-Z.]+) -捕获组1匹配1+ ASCII字母或.\s+ - 1+白空间([0-9]+) -捕获组2匹配1+ ASCII位数\.pdf -只匹配.pdf子字符串。https://stackoverflow.com/questions/41242105
复制相似问题