如何在Python中执行regex?

2024-04-18 16:38:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python从csv文件创建一个excel文件。我试图让它到哪里,如果为单元格的数据以“=”开头,然后打印它作为一个excel函数。。。但我一点运气都没有。我试着对字符串执行regex,看看它是否以“=”开头,但它不起作用。到目前为止,我在Python中的内容如下:

import xlwt
import re

string = '=HYPERLINK("http://www.google.com";"Google")'

if re.match("^=", string) == True:
    formData = re.sub('=', '', string)
    sheet.write(row_count,col-1, Formula("'" + formDta + "'"),style)

这不是正确的方法,还是我的语法不对?有什么建议可以让我这样做吗?你知道吗


Tags: 文件csv数据函数字符串importrehttp
3条回答

问题是你在和True比较。Python的True是一个布尔对象。re.match()返回match对象。当Python比较两者时,类型不匹配,if测试失败。你知道吗

在python中执行regexp测试的惯用方法是:

if re.match(regexp, string):

为了ifwhile测试的目的,Python将大多数非False、非None值视为true。上面的代码使用这种行为—如果正则表达式匹配,则返回一个match对象并通过测试。如果正则表达式不匹配,则返回None,测试失败。你知道吗

你不需要正则表达式。像这样的:if string.startswith('='): do something就可以了。你知道吗

也就是说,下面是Python documentation for the ^{} module的摘录:

Python offers two different primitive operations based on regular expressions: match checks for a match only at the beginning of the string, while search checks for a match anywhere in the string (this is what Perl does by default).

也就是说,如果您使用的是re.match(),那么^行锚点的开始是不必要的。你知道吗

EDIT:@aix对re.match()的行为是正确的-它只会将模式匹配到整行(而不是其中的一部分)

s = '=HYPERLINK("http://www.google.com";"Google")'

if s.startswith('='):
   ...

代码无法工作的原因是re.match()仅在整个输入字符串与regex匹配时返回True。在您的情况下,只有第一个字符可以。您可以使用^{},或者将正则表达式更改为"^=.*"。然而,我认为startswith()是一个更好的方法。你知道吗

另外,我已经重命名了您的变量,这样它就不会影响标准的^{}模块。你知道吗

相关问题 更多 >