猿问

正则表达式搜索字符串中的多个标记

所以我应该得到一个字符串并能够按顺序将其分成许多标记。所以如果我的字符串是 25 + 90 - x * z30 我的输出应该是 Line: 25 + 90 - x * z30


数量:25


标点符号:+


数量:90


标点符号:-


标识符:x


标点符号:*


识别:z30


目前我的代码还处于早期阶段


txt = '25 + 90 - x * z30'


number = '[0-9]+'

identifier = '[a-zA-z][a-zA-Z0-9]*'

punctuation = '[(/*+)-]'


        id = re.search(identifier, txt)

        num = re.search(number, txt)

        punc = re.search(punctuation, txt)

        print('Line: ', txt)

        print('Identifier: ', id)

        print('Number: ', num)

        print('punctuation', punc)

我很困惑如何在第一次搜索后继续阅读字符串以获得每个类别的下一次搜索以及如何让它们按顺序出现。我必须做一个特定的循环才能得到这样的结果吗?因为目前我只能对每个搜索进行第一次搜索,并且按照其硬编码的顺序进行搜索


沧海一幻觉
浏览 103回答 1
1回答

慕姐8265434

一种方法是将字符串拆分为标记(txt.split()可以),然后检查每个标记以查看它匹配的正则表达式。像这样的东西(未经测试)。print("Line:", txt)for token in txt.split():    id = re.search(identifier, token)    num = re.search(number, txt)    punc = re.search(punctuation, txt)    if id and id.group(0) == token:   # there was a match, and the match was the whole token        print("Identifier:", token)    elif num and num.group(0) == token:        print("Number:", token)    elif punc and punc.group(0) == token:        print("Punctuation:", token)    else:        print("Unrecognized:", token)有更好的方法可以做到这一点。例如,您可以将正则表达式放入字典中并对其进行迭代,而不是编写 s 链if。
随时随地看视频慕课网APP

相关分类

Python
我要回答