为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

沧海一幻觉 2023-08-08 10:01:44
所以我应该得到一个字符串并能够按顺序将其分成许多标记。所以如果我的字符串是 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)我很困惑如何在第一次搜索后继续阅读字符串以获得每个类别的下一次搜索以及如何让它们按顺序出现。我必须做一个特定的循环才能得到这样的结果吗?因为目前我只能对每个搜索进行第一次搜索,并且按照其硬编码的顺序进行搜索
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

一种方法是将字符串拆分为标记(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。


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信