与不在python中工作的“-”重新匹配

与不在python中工作的“-”重新匹配,python,pattern-matching,Python,Pattern Matching,我有以下代码 if(keys==14): print (values) result = re.match("(^\-)", str(values)) print "RR is", result, (values) 但这一匹配并不适用于采样线。这是我得到的输出 无法复制: >>> x='-bob' >>> re.match('(^\-)', x) <_sre.SRE_Match object; span=(0, 1), mat

我有以下代码

if(keys==14):
    print (values)
    result = re.match("(^\-)", str(values))
    print "RR is", result, (values)
但这一匹配并不适用于采样线。这是我得到的输出

无法复制:

>>> x='-bob'
>>> re.match('(^\-)', x)
<_sre.SRE_Match object; span=(0, 1), match='-'>
这里切换到Python2,这就是为什么match对象的repr与上面的代码段不同,我在这里使用的是Python3。另一方面,由于match方法始终锚定在起始位置,因此我在开始时删除了模式^中的冗余插入符号


其核心思想当然是:使用Unicode处理语义上实际的文本,而不是字节字符串;B使用repr检查实际存在的标志符号,而不仅仅是它们在某些上下文中的外观,因为非显示标志符号和外观相似的标志符号可能会欺骗您;和C unicode重模式的[\xad-]部分匹配软连字符'\xad'或实际破折号-破折号必须排在第二位,正好在“]之前,因为重模式语法,否则它将表示匹配一系列字符,而我们希望匹配实际破折号(如果存在的话)。

在使用RE.match^-,值并将其分配给结果,我们不会更改“值”。因此,在这两个print语句中,“值”都将是“-bob”。 匹配的对象将出现在“结果”中

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

那么打印reprvalues会产生什么呢?re.matchregex,string只会返回匹配对象。另外,您如何解释生成的打印值-bob和print RR,result,值突然只生成bob而没有破折号。您的代码无法生成您显示的结果,除非在运行此部分之前sys.stdout.write首先执行了其他操作。第二行也有“-”,但在我复制到此处时丢失了“-”。无论如何,当我执行一个reprvalues时,我看到-bob RR是None'\xc2\xadbob'。那么我现在如何匹配呢?很奇怪,print语句之间的值打印方式有什么不同……不管怎样,当我做了一个reprvalues时,我看到-bob RR是None'\xc2\xadbob'。那么我如何匹配nowAha,不是一个不可打印的字符,而是一个可以与破折号同名的字符——特别是一个utf-8编码的软连字符。那么,您最好将字节字符串解码为Unicode并进行处理—编辑答案以显示出来。@veny99,不客气—记住接受答案*单击其左侧的复选标记形状的轮廓。
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