首页 > 正则表达式提取指定字符串

正则表达式提取指定字符串

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)不能正确提取出想要的数据

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

答案如下:

#-*- 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}$}


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

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

【热门文章】
【热门文章】