码迷,mamicode.com
首页 > 编程语言 > 详细

python3: 字符串和文本(2)

时间:2019-01-29 20:27:41      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:span   strong   模式   除了   字符   需要   操作   id3   引号   

6. 字符串忽略大小写的搜索替换

>>> text = UPPER PYTHON, lower python, Mixed Python
>>> re.findall(python, text, flags=re.IGNORECASE)
[PYTHON, python, Python]
>>> re.sub(python, snake, text, flags=re.IGNORECASE)
UPPER snake, lower snake, Mixed snake
>>>

7.最短匹配

Q: 你正在试着用正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配。 而你想修改它变成查找最短的可能匹配。

S:这个问题一般出现在需要匹配一对分隔符之间的文本的时候(比如引号包含的字符串)。 为了说明清楚,考虑如下的例子:模式 r‘\"(.*)\"‘ 的意图是匹配被双引号包含的文本。(.)匹配除了换行外的任何字符

>>> str_pat = re.compile(r"(.*)")
>>> text1 = Computer says "no."
>>> str_pat.findall(text1)
[no.]
>>> text2 = Computer says "no." Phone says "yes."
>>> str_pat.findall(text2)
[no." Phone says "yes.]

第二个例子中搜索 text2 的时候返回结果并不是我们想要的。

为了修正这个问题,可以在模式中的*操作符后面加上?修饰符,就像这样:

>>> str_pat = re.compile(r"(.*?)")
>>> str_pat.findall(text2)
[no., yes.]
>>>

通过在 * 或者 + 这样的操作符后面添加一个 ? 可以强制匹配算法改成寻找最短的可能匹配。

  8. 多行匹配模式

Q: 你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。

S:这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。 比如,假设你想试着去匹配C语言分割的注释:

 

 

 

 

python3: 字符串和文本(2)

标签:span   strong   模式   除了   字符   需要   操作   id3   引号   

原文地址:https://www.cnblogs.com/xiyuan2016/p/10335401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!