代码之家  ›  专栏  ›  技术社区  ›  Skitzafreak

正则表达式行尾和特定字符

  •  -1
  • Skitzafreak  · 技术社区  · 8 年前

    T12F8B0A22**F8 .星号是区分每个字符串代码的两个字母数字段。

    这是我到目前为止的正则表达式: '/^T12F8B0A22[A-Z0-9]{2}F8$/'

    $/ 表示正则表达式中的行结束。但是,当我通过调试器运行代码时,我注意到在运行以下代码后:

    #regexString contains the serial read line data
    regexString = re.sub('/^T12F8B0A22[A-Z0-9]{2}F8$/', '', regexString) 
    

    我的字符串看起来像这样: 'T12F8B0A2200F8\\r'

    我需要摆脱 \\r .

    3 回复  |  直到 8 年前
        1
  •  1
  •   Błotosmętek    8 年前

    你的问题有三个方面:

    1) 您的字符串包含额外的 \r (回车字符)之前 \n (换行符);这在Windows和网络通信协议中很常见;最好从字符串中删除任何尾随空格:

    regexString = regexString.rstrip()
    

    / 字符-一些语言(如Perl)将regexp定义为由分隔的字符串 字符,但Python不是其中之一;

    re.sub 实际上是替换 regexString 保持 这场比赛,并删除一切,对吗;这就是为什么修复regexp会让事情变得“更糟”。

    总而言之,我认为您应该使用此代码,而不是当前的代码:

    m = re.match('T12F8B0A22[A-Z0-9]{2}F8', regexString)
    regexString = m.group(0)
    
        2
  •  0
  •   Marvin Taschenberger    8 年前

    有几种方法可以去掉“\r”,但首先需要对代码进行一些分析: 1.python中结尾的特殊字符只是“$”而不是“$\”。 2.re。sub将用一个字符串替换匹配的模式(在您的示例中为“”),该字符串将用空字符串替换您想要获得的字符串,剩下的是//r

    1. 使用简单替换:

       regexString.replace('\\r','')
      
    2. pattern = '\\\\r'         
      match = re.sub(pattern, '',regexString)
      

    2.2如果您想要访问不同组,请使用re.search

        match = re.search('(^T12F8B0A22[A-Z0-9]{2}F8)(.*)',regexString)
        match.group(1) # will give you the T12...
        match.groupe(2) # gives you the \\r
    
        3
  •  0
  •   Mark Tolonen    8 年前

    只要匹配你想找到的。几个例子:

    import re
    
    data = '''lots of
    otherT12F8B0A2212F8garbage
    T12F8B0A2234F8around
    T12F8B0A22ABF8the
    stringsT12F8B0A22CDF8
    '''
    
    print(re.findall('T12F8B0A22..F8',data))
    

    m = re.search('T12F8B0A22..F8',data)
    if m:
        print(m.group(0))
    

    T12F8B0A2212F8