0

我试图在如下所示的列表中找到术语DRFT5.147.001 。但是我的正则表达式没有返回任何结果,这看起来很奇怪。

列表: 单词:

> ['DRFT5.147.001', '0000000000000000', '0139', '10.00',
> '700000031479999', '05/27/13', '(002)', '<MAN.', 'CORR', 'BY', 'LG0',
> 'DRFT5.147.001', '00000000', '0139', '25.00', '70000003147999999',
> '05/27/13', '(002)', '<MAN.', 'CORR', 'BY']

代码

ii = [i for i,item in enumerate(words) if re.match(r'w{3}d{1}\.d{3}\.d{3}',item)]

此代码适用于DRFT5.147.001 之类的单词,也适用于类似 DRFT5.147.002之类的单词

4

1 回答 1

2

尝试更改为:

r'\w{4}\d{1}\.\d{3}\.\d{3}'

通常,您必须转义所有.字符,因为这在正则表达式中具有特殊含义。此外,当引用数字或单词字符时,您不能简单地使用字母,而是必须让 python 知道您指的是特殊的东西,因此\

此外,DRFT5 有 4 个字母和一个 1 位数字,因此更改为\w{4}

值得一提的是,您不必创建另一个模式来匹配DRFT5.147.002,这个正则表达式模式将完美匹配。

于 2013-06-25T15:31:01.833 回答