如何使用python正则表达式finditer查找所有匹配项

时间:2017-03-17 13:32:23

标签: python regex match

我正在努力寻找一种模式。我写了下面的代码:

sensed_ch_state = t_status;
mac->PLME_CCA_confirm(sensed_ch_state);

上面的代码返回('000,001,1','','','1'),因为它错过了与群组的匹配('','0','','1,100,001')

如果连续线上'00'之前和之后的角色相同,我正在尝试锻炼。我写的代码匹配'000,001,1 00 00 1'。如何匹配' 00 0, 00 1,100,001'。

如何获取后来的匹配组?

1 个答案:

答案 0 :(得分:0)

  

评论:对于字符串&#;; 2295051,2238451,2235301,1950522,2238451,3530333'
  ...您看到这些组在发生之前具有相同的位数,即2位数字,并且在它们出现之后是1位数

string = '2295051,2238451,2235301,1950522,2238451,3530333'  

_Step 1_  
pattern = '(\d+)'
Output: ('2295051',) ('2238451',) ('2235301',) ('1950522',) ('2238451',) ('3530333',)  

_Step 2_
pattern = '((\d\d)\d+)'  
Output: ('2295051', '22') ('2238451', '22') ('2235301', '22')  
        ('1950522', '19') ('2238451', '22') ('3530333', '35')  

_Step 3_
pattern = '((\d\d)\d+(\d))'
Output: ('2295051', '22', '1') ('2238451', '22', '1') ('2235301', '22', '1')  
('1950522', '19', '2') ('2238451', '22', '1') ('3530333', '35', '3')  

在文档re.html#module-re中了解'+'的含义。

  

评论:...我不明白它是如何做到的以及如何利用它...

pattern = '((\d\d)\d+(\d))'搜索子字符串,从2位数\d\d开始,后跟任意数量的数字,最后一位,一位数字\d。此模式是通用的,匹配任何子字符串,至少与len = 4的数字匹配。

尝试这种模式:

string = '000,001,100,001'
pattern = '((\d)00|00(\d))'

for m in re.finditer(pattern, string):
    print(m.groups())

<强>输出

  

(&#39; 000&#39;,&#39; 0&#39;,无)
  (&#39; 001&#39;,无,&#39; 1&#39;)
  (&#39; 100&#39;,&#39; 1&#39;,无)
  (&#39; 001&#39;,无,&#39; 1&#39;)

第一项000同时包含 之前的之后的

使用Python测试:3.4.2 - re:2.2.1
如果这对您有用,请回来并将您的问题标记为已回答,或者为什么不对其进行评论。