使用非捕获扩展来查找python正则表达式中的匹配项

时间:2018-05-18 10:19:35

标签: python regex findall

我有一个无意义的字符串,我想从中拉出缩写。

import re
string = 'in the U.S.A. there are (i.e., AUD113.3m) said R. Jones'

re.findall('(?:[a-zA-Z]\.)+', string)
>>>> ['U.S.A.', 'i.e.', 'R.']

Q值。让我们说我需要这些缩写成为re.group()的一部分,这样我以后可以将它们称为re.group(1),re.group(2)等。因为使用{{ 1}}意味着它们不会被(?:...)re.search()捕获,如果你不知道你要找多少匹配,最好的方法是什么,得到这样的东西:

re.match()

现在,我知道search()只找到第一个匹配项,但是你可以通过重复使用正在查找的内容的正则表达式来获取re.search中的组,如下所示:

m = re.search(r'regex', s)
m.group()
>>>> ('U.S.A.', 'i.e.', 'R.')
m.group(2)
>>>> R.

findall很好,因为你不必知道要查找多少个表达式重复 - 它只是找到它们。但是,如果你有一篇很长的文字而且你不知道要在你的re.search正则表达式中加入line = r'2018\2019-2020-2021' year = re.search(r'(\d{4}).*(\d{4}).*(\d{4}).*(\d{4})', line) year.group(1) >>>> '2018' year.group(2) >>>> '2019' year.group(3) >>>> '2020' year.group(4) >>>> '2021' 多少呢?

0 个答案:

没有答案