堆栈溢出用户已经向我展示了https://pythex.org/,它允许您构建和测试正则表达式。
我已经成功地只能编写表达式,但是当涉及到在python中使用re时实际使用它。模块我很困惑。
我不明白的是何时使用.compile,以及何时进行re.search - >
如果我搜索括号内的文本,例如有多个,我收集我应该使用.group [x]其中x是你想要返回的项目的索引
示例
pattern = re.compile(r'View All \((\d*)\)')
number = pattern.search(data).group(2);
据我了解,如果我有以下内容,则number_connections变量在打印时将为
View All (8) View All (16) View All (12)
结果
Print number
16
我没有得到的结果是:如果您正在寻找的文本不止一个,那么您如何循环它们,以及如何计算它们的数量?
For example: number.count() would return, found 3
for i in number: (this doesn't work because match is a regular expression object???)
print i
但是,如果正则表达式中只有一个正在查找的文本,会发生什么?
示例
正则表达式: pattern = re.compile('[a-zA-Z] \ s [a-zA-Z] / [a-zA-Z] / [a-zA-Z] < / EM>') email = pattern.search(data).group(1);
结果
data: "email-id":"FisrtName LastName/Australia/ABC"}]</p></body></html>
should return: firstname lastname/Australia/ABC
页面上可能有或不多有这些内容 - 在这种情况下,始终使用结果[0]将无效,因为页面上可能只有一个电子邮件地址实例。
现在我意识到我的语法显然是错误的,但这样做也给了我以下内容,所以我正在寻找有关如何使用https://pythex.org/构建它后如何正确使用正则表达式的指导:
email = pattern.search(data)
print email
<_sre.SRE_Match object at 0x0553B090>
答案 0 :(得分:3)
听起来我觉得你正处于使用Python正则表达式的阶段,你需要阅读一些文档或完整的教程 - 而不是试图获取断开连接的知识。
无论是否编译正则表达式,都可以访问完全相同的匹配。
引用Jan Goyvaerts,RegexBuddy的作者和正则表达式食谱的共同作者:
如果您想多次使用相同的正则表达式,那么 应该将它编译成正则表达式对象。正则表达式 对象更有效,并使您的代码更具可读性。至 创建一个,只需调用re.compile(regex)或re.compile(正则表达式,flags)。 标志是上面针对re.search()描述的匹配选项 和re.match()函数。
re.compile()返回的正则表达式对象提供了所有 re模块也直接提供的功能:search(), match(),findall(),finditer(),sub()和split()。不同的是 他们使用存储在正则表达式对象中的模式,而不是采取 正则表达式作为第一个参数。 re.compile(regex).search(subject)是 相当于re.search(正则表达式,主题)。
对于多个匹配项,您可以使用findall
或finditer
(同一页面上的详细信息)。