鱼C论坛

 找回密码
 立即注册
查看: 1901|回复: 6

[已解决]正则表达式的|怎么用

[复制链接]
发表于 2021-3-28 16:16:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re

def isNum(s):
    p = re.compile(r"-?\d+")
    q = re.compile(r"-?\d+\.\d+")
    w = re.compile(r"-?\d+(\+|\-)\d+j")#复数形式为a+bj或a-bj
    result_1 = p.search(s)
    result_2 = q.search(s)
    result_3 = w.search(s)
    if result_1 != None and result_1.group() == s:
        return True
    elif result_2 != None and result_2.group() == s:
        return True
    elif result_3 != None and result_3.group() == s:
        return True
    else:
        False

while True:
    a = input("输入:")
    if a == 'xx':
        break
    print(isNum(a))
我想把p,q,w变成一个,然而不管我r"-?\d+|-?\d+\.\d+|-?\d+(\+|\-)\d+j"还是r"(-?\d+)|(-?\d+\.\d+)|(-?\d+(\+|\-)\d+j)"都不行。。。。
有大佬知道该怎么把它们放在一起吗?
最佳答案
2021-3-28 19:09:07
本帖最后由 柿子饼同学 于 2021-3-28 19:13 编辑

这个方便你理解
num = re.compile(r'''
[+-]?\d+             (?#正负整数)
(\.\d+               (?#正负整数+小数部分)
|[+-]\d+j            (?#正负整数+复数部分)
|[eE][+-]?\d+)       (?#正负整数+e记法部分)
?                    (?#注意到了吗,小数到e记法都是一个子组,这时匹配0次就相当于匹配整数)
''', re.VERBOSE)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-28 17:16:18 | 显示全部楼层
把题目发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-28 18:03:11 | 显示全部楼层
题目是:实现isNum()函数,参数是一个字符串,如果字符串属于整数、浮点数或复数,则返回True否则返回False。
其实很容易的,只是我想用正则表达式搞一下,然后就发现不能用“|”来编译,就很奇怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-28 18:06:25 | 显示全部楼层
这个题这么做有点小缺陷,比如不能匹配科学计数法的表达形式啥的,我就想搞懂一下那个“|”的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-28 18:59:49 | 显示全部楼层
num = re.compile(r'[+-]?\d+(\.\d+|[+-]\d+j|[eE][+-]?\d+)?')
,亲测能用用,可以匹配正负整数小数复数以及e记法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-28 19:09:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 柿子饼同学 于 2021-3-28 19:13 编辑

这个方便你理解
num = re.compile(r'''
[+-]?\d+             (?#正负整数)
(\.\d+               (?#正负整数+小数部分)
|[+-]\d+j            (?#正负整数+复数部分)
|[eE][+-]?\d+)       (?#正负整数+e记法部分)
?                    (?#注意到了吗,小数到e记法都是一个子组,这时匹配0次就相当于匹配整数)
''', re.VERBOSE)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-28 19:14:29 | 显示全部楼层
秋柔采梦术 发表于 2021-3-28 18:06
这个题这么做有点小缺陷,比如不能匹配科学计数法的表达形式啥的,我就想搞懂一下那个“|”的用法

Python3 如何优雅地使用正则表达式(详解四)
https://fishc.com.cn/thread-57271-1-1.html
(出处: 鱼C论坛)
这些东西可以查的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 03:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表