python中的正则表达式匹配的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的正则表达式匹配的问题?相关的知识,希望对你有一定的参考价值。
程序要求是要从发件人中提取出邮箱地址
for <source@collab.sakaiproject.org>; Sat, 5 Jan 2008 14:13:33 +0000 (GMT)
使用“\S+@\S+”匹配的结果:<source@collab.sakaiproject.org>;
使用“[a-zA-Z0-9]\S*@\S*[a-zA-Z]”匹配的结果:source@collab.sakaiproject.org
问题是:
为什么“[a-zA-Z]”可以匹配小数点 “ .” ,却过滤掉 “>” 和“ ; ” ?
然后[a-zA-Z] 表示匹配到一个字母就结束
这句正则就是 以字母开始和结尾 中间有一个@的非空格字符串追问
谢谢,那为什么可以匹配小数点,而忽略“>;”呢?
追答\. 就是只匹配点符
参考技术A 你理解错了。r"2x\+5y"这里是指对字符串
中的"\"不做转义处理;
而正则表达式中"\+"表示的是对
正则表达式
中的"+"做转义处理,这是因为"+"在正则表达式中有特殊含义,这和字符串的转义是没有关系的。
说的更清楚一点就是,你在程序里写"\\+"或者r"\+"在内存里都是保存了一个"\"和一个"+",而正则表达式引擎只要从内存读取到一个连续的"\"和"+",就会理解为你想要匹配"+"这个字符。
所以说,如果你不在字符串前写r,那个正则表达式字符串应该这么写的:
"2x\\+5y|7y-3z"
为啥这个正则表达式只在 Python 中的行首匹配? [复制]
【中文标题】为啥这个正则表达式只在 Python 中的行首匹配? [复制]【英文标题】:Why does this Regex only match at the start of the line in Python? [duplicate]为什么这个正则表达式只在 Python 中的行首匹配? [复制] 【发布时间】:2016-03-14 14:08:12 【问题描述】:在 Python 中我可以做到
import re
re.match("m", "mark")
我得到了预期的结果:
<_sre.SRE_Match object; span=(0, 1), match='m'>
但它只有在模式位于字符串开头时才有效:
re.match("m", "amark")
给出None
。注意到该模式要求它位于字符串的开头 - 没有 ^
或类似的。事实上,它在regex101 上按预期工作。
Python 是否有一些特殊行为 - 请问如何禁用它?
【问题讨论】:
此问题与标记的问题不重复。是的,答案是重复的,但问题来自完全不同的角度。我必须知道我的问题的答案才能将另一个识别为“重复”。 这绝对是一个骗子,如果不是那个,还有一个关于re.match
的。顺便说一句,re.match
在 line 的开头不匹配,它只在 string 的开头匹配。
我没说这不是骗子。我说这不是被标记的人的欺骗。它应该被标记为一个问题的欺骗,而不是其他问题。
绝对是重复的。此外,re.match
的文档清楚地表明它试图“在字符串的开头应用模式”。在这里花点时间研究会很有意义。
我想指出,以这种方式表达的问题使我能够找到答案。我确实阅读了文档,但在第一遍时我错过了。感谢您提出这个问题。
【参考方案1】:
来自re.match
上的文档:
如果
string
的开头有零个或多个字符与正则表达式pattern
匹配,则返回对应的匹配对象。
使用re.search
搜索整个字符串。
文档甚至为这个问题提供了单独的章节,概述了两者之间的区别:search()
vs. match()
【讨论】:
Repetitio est mater studiorum. et suppositio nil ponit in esse.【参考方案2】:import re
re.match("[^m]*m", "mark")
match
从字符串的开头匹配。所以如果m
不在字符串的开头,你需要给它一个匹配字符串开头的方法。
【讨论】:
以上是关于python中的正则表达式匹配的问题?的主要内容,如果未能解决你的问题,请参考以下文章