用于简单表达式的Python正则表达式标记器
我写了这个正则表达式,它将表达式'res=3+x_sum*11'拆分为词素用于简单表达式的Python正则表达式标记器,python,regex,python-3.x,Python,Regex,Python 3.x,我写了这个正则表达式,它将表达式'res=3+x_sum*11'拆分为词素 import re print(re.findall('(\w+)(=)(\d+)(\*|\+)(\w+)(\*|\+)(\d+)', 'res=3+x_sum*11')) 我的输出如下所示: [('res', '=', '3', '+', 'x_sum', '*', '11')] [('', 'res', ''), ('', '', '='), ('3', '', ''), ('', '', '+'), ('',
import re
print(re.findall('(\w+)(=)(\d+)(\*|\+)(\w+)(\*|\+)(\d+)', 'res=3+x_sum*11'))
我的输出如下所示:
[('res', '=', '3', '+', 'x_sum', '*', '11')]
[('', 'res', ''), ('', '', '='), ('3', '', ''), ('', '', '+'),
('', 'x_sum', ''), ('', '', '*'), ('11', '', '')]
但我希望re.findall返回词素及其标记的列表,以便每个词素都在自己的组中。该输出应如下所示:
[('res', '=', '3', '+', 'x_sum', '*', '11')]
[('', 'res', ''), ('', '', '='), ('3', '', ''), ('', '', '+'),
('', 'x_sum', ''), ('', '', '*'), ('11', '', '')]
如何让re.findall返回这样的输出您可以使用
re.findall(r'(\d+)|([^\W\d]+)|(\W)', s)
看。请注意,re.findall
在模式包含多个捕获组后返回元组列表。上面的模式包含3个捕获组,因此,每个元组包含3个元素:1+数字、1+字母/下划线或非单词字符
更多详细信息
-捕获组1:1+个数字(\d+)
-或|
-捕获组2:1+字符,非单词和数字字符(字母或下划线)除外([^\W\d]+)
-或|
-捕获组3:非单词字符(\W)