[英]How to find all substrings in a string that starts with {{ and ends with }
[英]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.