我想将一个字符串拆分为与正则表达式匹配的部分和不匹配的部分。
例如
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']
答案 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)