我有以下代码
if(keys==14):
print (values)
result = re.match("(^\-)", str(values))
print "RR is", result, (values)
但匹配不适用于示例行。这是我得到的输出
-bob
RR is None bob
答案 0 :(得分:1)
无法重现:
>>> x='-bob'
>>> re.match('(^\-)', x)
<_sre.SRE_Match object; span=(0, 1), match='-'>
您的values
可能会有所不同,可能是在开头添加了不可打印的字符。尝试打印repr
以确保不是这种情况......!
编辑:确实repr
显示values
以软连字符(以utf-8编码)开头,有时可能显示为破折号,但实际上并不是破折号。 RE匹配编码的字节串可能不方便,所以我们首先将其解码为文本:
>>> x = '\xc2\xadbob' # or however else `values` is obtained as such
>>> y = x.decode('utf8')
>>> re.match(ur'([\xad-])', y)
<_sre.SRE_Match object at 0x1004c0af8>
(这里切换到Python 2,这就是为什么匹配对象的repr与上面的代码片段不同,我使用的是Python 3)。在旁注中,我已经删除了模式中的多余插入符号(开始时为^
),因为match
方法始终总是锚定在开头
当然,核心思想是:(A)使用Unicode来处理语义上的实际文本而不是字节串; (B)使用repr
来检查实际存在的字形,而不仅仅是在某些情况下它们看起来像什么(因为非显示的字形和相似的字形可能会欺骗你); (C)(unicode)RE模式的[\xad-]
部分匹配 一个软连字符(&#39; \ xad&#39;)或实际短划线 - 由于RE模式语法,短划线必须位于]
之前的第二位(否则它表示匹配一系列字符,而我们希望匹配实际短划线,如果那是什么在场)。
答案 1 :(得分:0)
在使用re.match(&#34;(^ - )&#34;,value)并将其分配给结果时,我们不会更改&#39;值&#39;。因此,在两个印刷语句中,&#39;值&#39;将是&#39; -bob&#39;。 匹配的对象将位于&#39;结果&#39;
中import re
values = "-bob"
keys = 14
if(keys==14):
print (values)
result = re.match("(^\-)", values)
print ("RR is", result.group(0), values)
输出
-bob
RR is - -bob