python返回匹配和不匹配的字符串模式

时间:2014-06-27 17:04:31

标签: python regex string

我想将一个字符串拆分为与正则表达式匹配的部分和不匹配的部分。

例如

import re
string = 'my_file_10'
pattern = r'\d+$'
#  I know the matching pattern can be obtained with :
m = re.search(pattern, string).group()
print m
'10'
#  The final result should be as following
['my_file_', '10']

2 个答案:

答案 0 :(得分:6)

在模式周围放置括号以使其成为捕获组,然后使用re.split()生成匹配和不匹配元素的列表:

pattern = r'(\d+$)'
re.split(pattern, string)

演示:

>>> import re
>>> string = 'my_file_10'
>>> pattern = r'(\d+$)'
>>> re.split(pattern, string)
['my_file_', '10', '']

因为你在字符串末尾分割数字,所以包含一个空字符串。

如果你只想要一个匹配,在字符串的末尾(模式中的$强制在这里),那么只需使用m.start()方法获取切片输入字符串的索引:

pattern = r'\d+$'
match = re.search(pattern, string)
not_matched, matched = string[:match.start()], match.group()

返回:

>>> pattern = r'\d+$'
>>> match = re.search(pattern, string)
>>> string[:match.start()], match.group()
('my_file_', '10')

答案 1 :(得分:2)

您可以使用re.split制作这些单独匹配的列表,然后使用filter过滤掉所有被视为false的元素(空字符串

>>> import re
>>> filter(None, re.split(r'(\d+$)', 'my_file_015_01'))
['my_file_015_', '01']