我使用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):
出于if
和while
测试的目的,Python将大多数非False
和非None
值视为true。上面的代码使用了这种行为——如果regex匹配,则返回一个match
对象,测试通过。如果正则表达式不匹配,则返回None
,测试失败。
s = '=HYPERLINK("http://www.google.com";"Google")'
if s.startswith('='):
...
代码不起作用的原因是,只有当整个输入字符串与正则表达式匹配时,re.match()
才会返回True
。在您的情况下,只有第一个字符可以。您可以使用re.search()
,也可以将正则表达式更改为"^=.*"
。然而,我认为startswith()
是一种更好的方法。
附言:我已经重命名了您的变量,这样它就不会覆盖标准的string
模块。