python3:regex,查找以特定字符串开头和结尾的所有子字符串
假设我有一个字符串,如下所示:python3:regex,查找以特定字符串开头和结尾的所有子字符串,python,regex,python-3.x,Python,Regex,Python 3.x,假设我有一个字符串,如下所示: a = '1253abcd4567efgh8910ijkl' 我想找到所有以数字开头,以字母结尾的子字符串 我试过了 b = re.findall('\d.*\w',a) 但这给了我 ['1253abcd4567efgh8910ijkl'] 我想要一些像 ['1234abcd','4567efgh','8910ijkl'] 我该怎么做?我对regex方法非常陌生,如果有人能在regex中展示如何用不同的方法来实现这一点,并解释发生了什么,我将不胜感激 \w
a = '1253abcd4567efgh8910ijkl'
我想找到所有以数字开头,以字母结尾的子字符串
我试过了
b = re.findall('\d.*\w',a)
但这给了我
['1253abcd4567efgh8910ijkl']
我想要一些像
['1234abcd','4567efgh','8910ijkl']
我该怎么做?我对regex方法非常陌生,如果有人能在regex中展示如何用不同的方法来实现这一点,并解释发生了什么,我将不胜感激
\w
将匹配由数字、字母和下划线组成的任何单词字符。您只需要使用[a-zA-Z]
来捕获字母。看看这个例子
import re
a = '1253abcd4567efgh8910ijkl'
b = re.findall('(\d+[A-Za-z]+)',a)
输出:
['1253abcd', '4567efgh', '8910ijkl']
\d
将匹配数字<代码>\d+将匹配一个或多个连续数字。例如
>>> re.findall('(\d+)',a)
['1253', '4567', '8910']
类似地,[a-zA-Z]+
将匹配一个或多个字母表
>>> re.findall('([a-zA-Z]+)',a)
['abcd', 'efgh', 'ijkl']
现在将它们放在一起,以匹配您想要的内容。
\w
将匹配由数字、字母和下划线组成的任何单词字符。您只需要使用[a-zA-Z]
来捕获字母。看看这个例子
import re
a = '1253abcd4567efgh8910ijkl'
b = re.findall('(\d+[A-Za-z]+)',a)
输出:
['1253abcd', '4567efgh', '8910ijkl']
\d
将匹配数字<代码>\d+将匹配一个或多个连续数字。例如
>>> re.findall('(\d+)',a)
['1253', '4567', '8910']
类似地,[a-zA-Z]+
将匹配一个或多个字母表
>>> re.findall('([a-zA-Z]+)',a)
['abcd', 'efgh', 'ijkl']
现在将它们放在一起以匹配您的确切需求。从中,它告诉我们\w
:
匹配任何字母数字字符和下划线;这相当于集合[a-zA-Z0-9_2;]
所以你实际上过度捕捉了你需要的东西。稍微优化一下正则表达式:
>>> re.findall(r'(\d+[a-z]+)', a, re.I)
['1253abcd', '4567efgh', '8910ijkl']
re.I
使表达式不区分大小写,因此它也将匹配大写和小写字母:
>>> re.findall(r'(\d+[a-z]+)', '12124adbad13434AGDFDF434348888AAA')
['12124adbad']
>>> re.findall(r'(\d+[a-z]+)', '12124adbad13434AGDFDF434348888AAA', re.I)
['12124adbad', '13434AGDFDF', '434348888AAA']
从中,它告诉我们\w
:
匹配任何字母数字字符和下划线;这相当于集合[a-zA-Z0-9_2;]
所以你实际上过度捕捉了你需要的东西。稍微优化一下正则表达式:
>>> re.findall(r'(\d+[a-z]+)', a, re.I)
['1253abcd', '4567efgh', '8910ijkl']
re.I
使表达式不区分大小写,因此它也将匹配大写和小写字母:
>>> re.findall(r'(\d+[a-z]+)', '12124adbad13434AGDFDF434348888AAA')
['12124adbad']
>>> re.findall(r'(\d+[a-z]+)', '12124adbad13434AGDFDF434348888AAA', re.I)
['12124adbad', '13434AGDFDF', '434348888AAA']
- \w将字符串与任何字母数字字符匹配。您已将\w与*一起使用。因此,您的代码将提供一个以数字开头的字符串,该字符串包含任意长度的字母数字字符
- 解决方案:
>>>b=re.findall('\d*[A-Za-z]*', a) >>>b ['1253abcd', '4567efgh', '8910ijkl', '']
- 您将在列表末尾获得“”(空字符串),以显示不匹配项。您可以使用
b.pop(-1)
- \w将字符串与任何字母数字字符匹配。您已将\w与*一起使用。因此,您的代码将提供一个以数字开头的字符串,该字符串包含任意长度的字母数字字符
- 解决方案:
>>>b=re.findall('\d*[A-Za-z]*', a) >>>b ['1253abcd', '4567efgh', '8910ijkl', '']
- 您将在列表末尾获得“”(空字符串),以显示不匹配项。您可以使用
b.pop(-1)