繁体   English   中英

python3:正则表达式,查找所有以某些字符串开头和结尾的子字符串

[英]python3: regex, find all substrings that starts with and end with certain string

假设我有一个看起来像这样的字符串:

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']

现在将它们放在一起以符合您的实际需求。

关于正则表达式Python手册中 ,它告诉我们\\w

匹配任何字母数字字符和下划线; 这等效于设置[a-zA-Z0-9_]

因此,实际上您已无法满足需要。 完善您的正则表达式:

>>> 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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM