佚名通过本文主要向大家介绍了正则表达式提取字符串,正则表达式匹配字符串,正则表达式截取字符串,正则表达式任意字符串,字符串正则表达式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:正则表达式提取指定字符串
描述:
解决方案1:
描述:
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)不能正确提取出想要的数据
解决方案1:
这个看你具体业务了,如果按照你上面的text和原来的正则表达式的话,正则改成'\\frac{.*}'应该就能完成,如果是要捕捉两个$符号之间的 '\$(.*)\$'的子捕获应该就是结果.
你原来的表达式因为加了'?',变成非贪婪,第一个'{.*?}'捕捉的是{$\frac{1},第二个捕捉的是{2},所以没有提取正确数据
问题似乎换成多行的了,不过一样,看你的正则配置'.'是匹配非换行符的,则不变,如果'.'是匹配包括换行符的,那就换成'\${\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}$}