免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11864 | 回复: 10
打印 上一主题 下一主题

弱问:如何转义变量里面的特殊字符? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-20 16:43 |只看该作者 |倒序浏览
比如 a = 'test(txt)'
然后 re.search(a,a)就不会给出结果,因为()会当做特殊字符处理
怎么得到raw字符串呢?

搜过一下,r'test(txt)'是可以,但是我需要用的是个变量,不是原始字符串
raw(a) 我没有这个函数
re.search(raw_input(a),a) 在ipython倒是可以,但是我想这是因为交互模式的缘故吧, raw_input(a) return的是个 空字符串 ''

谢谢各位

论坛徽章:
0
2 [报告]
发表于 2012-01-20 17:45 |只看该作者
  1. Definition: re.search(pattern, string, flags=0)
复制代码
re.search的第一个参数需要的是正则表达式,即放在第一个位置的参数要符合正则的表达能匹配到要search的字符串
现在a='test(txt)',要完全匹配字符串a的正则表达式应该是'test\(txt\)'
这样:
  1. a='test(txt)'
  2. pattern='test\(txt\)'
  3. re.search(pattern,a)
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-01-21 10:38 |只看该作者
谢谢楼上
你说的我明白
问题是怎么自动把a 转换成 pattern?

论坛徽章:
0
4 [报告]
发表于 2012-01-21 11:15 |只看该作者
  1. a.replace("(","\(").replace(")","\)")
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-01-21 11:59 |只看该作者
yangkyo821 发表于 2012-01-21 11:15

谢谢.

还是没说清楚,我想问一个通用的解决方法,不管()也好 \d \w \S 等也好,我想知道怎么可以把一个str变量a变成raw字符串
这样我re.search(f(a),a) 总是能发现匹配

论坛徽章:
0
6 [报告]
发表于 2012-01-21 12:24 |只看该作者
Raw String - Suppress actual meaning of Escape characters.

raw string是让逃脱字符("\")失效,使解释器不将\t,\b,\n,\1,之类的当成acii字符。也许并不是你需求的效果
re.search(f(a),a)匹配,把f(a)返回值中的所有正则的关键字前加上"\",应该可以达到要求吧

论坛徽章:
0
7 [报告]
发表于 2012-01-21 12:29 |只看该作者
按你的原意也许是用不到正则,那么用a.find(f(a))会效率更高

论坛徽章:
0
8 [报告]
发表于 2012-01-21 14:34 |只看该作者
yangkyo821 发表于 2012-01-21 12:24
raw string是让逃脱字符("\")失效,使解释器不将\t,\b,\n,\1,之类的当成acii字符。也许并不是你需求的效 ...

恩,这不是我严格想要的

我是想让一个变量 a 所有的特殊字符失效,不被当做正则表达式被解释。 但是a外面可能又需要正则表达式
比如 re.search(‘\d+-’+a+ ‘-\d+',b)  这样,我希望不要因为a自己有一些正则表达式的字符就不能匹配上了

另外,我怎么把a变成raw string呢? 没有raw这个函数 。。。

论坛徽章:
0
9 [报告]
发表于 2012-01-21 14:36 |只看该作者
yangkyo821 发表于 2012-01-21 12:29
按你的原意也许是用不到正则,那么用a.find(f(a))会效率更高

恩,不用正则的时候这个很方便

谢谢!

论坛徽章:
0
10 [报告]
发表于 2012-01-21 19:09 |只看该作者
本帖最后由 yangkyo821 于 2012-01-21 19:14 编辑

如果要的函数没有,自己写个小函数像
  1. a.replace("(","\(").replace(")","\)")
复制代码
这样,再替换完. * [ ] { } $ ^ 基本就差不多\b \B \w \s 之类的如果有也替换为\\b \\B \\w \\s
关于raw字符串,像储存在变量中的本来就是raw字符串,你是已经把raw字符串存在a里面了,又要把a摆到需要正则表达式的位置上,所以有这个矛盾,再仔细想想你绕在什么地方了。一定要那样做的话,就写那个函数,并不是很多需要替换,而且会很有效。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP