鱼C论坛

 找回密码
 立即注册
查看: 1296|回复: 7

求教一个关于正则表达式的问题

[复制链接]
发表于 2018-4-18 12:40:25 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 天圆突破 于 2018-4-18 12:44 编辑
  1. import re
  2. def negnum(string):
  3.     string = string
  4.     lst, nlst = re.findall('\(-?[\d.]+\)',string), list()
  5.     n = len(lst)
  6.     print(lst)
  7.     for i in range(n):
  8.         nlst.append('p'*('-' in lst[i]) + re.search('[\d.]+', lst[i]).group())
  9.     print(nlst)
  10.     for i in range(n):
  11.         string = re.sub(lst[i],nlst[i],string)
  12.     print(string)
  13.     return string
  14. if __name__ == "__main__":
  15.     print(negnum('(-1.1)*(-2)+(3)'))
复制代码


我输入一个字符串'(-1.1)*(-2)+(3)',希望能得到p1.1*p2+3,但是得到的结果却是(p1.1)*(p2)+(3),检查代码我觉得应该是这段代码string = re.sub(lst[i.],nlst[i.],string)
中lst[i.]的括号被当成元字符的括号处理了,那么问题来了,有没有函数能够把变量代表的字符串转化成原始字符串呢?
([i.]中的点是因为不加点会被论坛当成斜体字代码)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-18 13:09:23 | 显示全部楼层
不懂你想表达什么
['p1.1', 'p2', '3']
这里已经取得了。
直接字符连接不就行了吗?还搞那么多名堂。
'p1.1'+'*'+'p2'+'3' 这样不成????
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-18 13:56:52 | 显示全部楼层
ba21 发表于 2018-4-18 13:09
不懂你想表达什么
['p1.1', 'p2', '3']
这里已经取得了。

算数符号是参数里面的,我总不能把参数里面的符号写到函数里面吧。下一次换个算式呢?这次是'(-1.1)*(-2)+(3),下次是'(-1.1)-(-2)/(3)呢?
何况这个也是我为了举例现弄的一个函数,但就这个函数来说,用string.replace()更简单。但是我想请教大家,正则表达式里面,如果pattern是个变量的话,有没有函数或者什么方法可以把这个变量变成原始字符串?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 14:28:02 | 显示全部楼层
天圆突破 发表于 2018-4-18 13:56
算数符号是参数里面的,我总不能把参数里面的符号写到函数里面吧。下一次换个算式呢?这次是'(-1.1)*(-2) ...

(-1.1)
(-2)
(3)
取符号也好取了吧。都用()分开了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-18 18:22:38 | 显示全部楼层
我也不知道函数,想到的也只是蠢办法
  1.     for i in range(n):
  2.         lst[i]='\\'+lst[i][:-1]+'\)'
  3.         string = re.sub(lst[i],nlst[i],string)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-22 11:35:33 | 显示全部楼层
为什么不用字符串的replace()方法啊,string = string.replace(lst[i], nlst[i])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-22 14:07:07 | 显示全部楼层
瘫痪的废柴 发表于 2018-4-22 11:35
为什么不用字符串的replace()方法啊,string = string.replace(lst, nlst)

..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-22 14:55:31 | 显示全部楼层

我试了下可以的啊
  1. import re
  2. def negnum(string):
  3.     string = string
  4.     lst, nlst = re.findall('\(-?[\d.]+\)',string), list()
  5.     n = len(lst)
  6.     print(lst)
  7.     for i in range(n):
  8.         nlst.append('p'*('-' in lst[i]) + re.search('[\d.]+', lst[i]).group())
  9.     print(nlst)
  10.     for i in range(n):
  11.         string = string.replace(lst[i], nlst[i])
  12.     print(string)
  13.     return string
  14. if __name__ == "__main__":
  15.     print(negnum('(-1.1)*(-2)+(3)'))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 12:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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