如何在Python中执行regex



我使用Python从csv文件创建excel文件。如果单元格的数据以"="开头,我正试图将其打印为excel中的函数。。。但我运气不好。我试着对字符串执行正则表达式,看看它是否以"="开头,但它不起作用。以下是我迄今为止在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)

这不是正确的方法,还是我只是语法错误?关于我如何使这项工作成功,有什么建议吗?

您实际上并不需要regex。比如:if string.startswith('='): do something就可以了。

也就是说,这里摘录了re模块的Python文档:

Python基于正则表达式提供了两种不同的基元操作:匹配只在字符串的开头检查匹配,而搜索则在字符串的任何位置检查匹配(这是Perl默认执行的操作)。

也就是说,如果您使用的是re.match(),则线锚的^启动是不必要的。

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

问题是您正在与True进行比较。Python的True是一个布尔对象。re.match()返回一个match对象。当Python比较两者时,类型不匹配,if测试失败。

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

if re.match(regexp, string):

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

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

代码不起作用的原因是,只有当整个输入字符串与正则表达式匹配时,re.match()才会返回True。在您的情况下,只有第一个字符可以。您可以使用re.search(),也可以将正则表达式更改为"^=.*"。然而,我认为startswith()是一种更好的方法。

附言:我已经重命名了您的变量,这样它就不会覆盖标准的string模块。

最新更新