python - 正则表达式提取指定字符串
怪我咯
怪我咯 2017-04-17 16:02:51
[Python讨论组]
text = u'''$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,'''
#如何提取出$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$两端$包含的字符串,目标是提取出5组字符串
#用pattern = re.compile(r'\\frac{.*?}{(.*?)}', re.S)不能正确提取出想要的数据
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
黄舟

题主真是,问问题不一步问到位

答案如下:

#-*- coding: utf-8 -*-
import re

text = u'''$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,
$\frac{$\frac{1}{2}$}{$sqrt[]{2}$}$,'''

re_text = re.compile(ur'\$(.+)\$')
for i in re_text.finditer(text):
    #print(i.group(1))
    #本来到上面这行就可以结束了,然而上面的\f会被python转义,所以我们转回去
    print(i.group(1).replace("\f", "\\f"))

输出

\frac{$\frac{1}{2}$}{$sqrt[]{2}$}
\frac{$\frac{1}{2}$}{$sqrt[]{2}$}
\frac{$\frac{1}{2}$}{$sqrt[]{2}$}
\frac{$\frac{1}{2}$}{$sqrt[]{2}$}
\frac{$\frac{1}{2}$}{$sqrt[]{2}$}

PHPz

这个看你具体业务了,如果按照你上面的text和原来的正则表达式的话,正则改成'\\frac{.*}'应该就能完成,如果是要捕捉两个$符号之间的 '\$(.*)\$'的子捕获应该就是结果.
你原来的表达式因为加了'?',变成非贪婪,第一个'{.*?}'捕捉的是{$\frac{1},第二个捕捉的是{2},所以没有提取正确数据

问题似乎换成多行的了,不过一样,看你的正则配置'.'是匹配非换行符的,则不变,如果'.'是匹配包括换行符的,那就换成'\${\S*}\$'

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号