\ W用于检测转义序列-Regex

时间:2018-07-13 17:29:12

标签: python regex

\W检测到以下非单词字符

\\  Backslash (\)    
\'  Single quote (')     
\"  Double quote (")     
\a  ASCII Bell (BEL)     
\b  ASCII Backspace (BS)     
\f  ASCII Formfeed (FF)  
\n  ASCII Linefeed (LF)  
\r  ASCII Carriage Return (CR)   
\t  ASCII Horizontal Tab (TAB)   
\v  ASCII Vertical Tab (VT)  
\ooo    Character with octal value ooo  
\xhh    Character with hex value hh 
\newline    Backslash and newline ignored    

下面是两行,第一行以#开头(是纯注释),第二行是带有断续注释的多行字符串

# abc                                                    # def
1.3.6.1.4.1.555.2.12.6.102                 0x04444001    1.3.6.1.4.1.75.2.12.90.901(1,0)\
                                                         # xyz
                                                         1.3.6.1.4.1.75.2.12.90.902(2,0)\
                                                         # ddd
                                                         1.3.6.1.4.1.75.2.12.90.903(3,0)

上述某些行的最后一个非单词字符为\

目标是将上述语法构造为单个字符串:1.3.6.1.4.1.555.2.12.6.102 0x04444001 1.3.6.1.4.1.75.2.12.90.901(1,0) 1.3.6.1.4.1.75.2.12.90.902(2,0) 1.3.6.1.4.1.75.2.12.90.903(3,0)


如何在每行末尾检测反斜杠\?因为...

print(re.search(r'\\', 'hello\there'))      # '\\' in r'hello\there' gives None - Because backslash is interpreted as part of Esc seq
print(re.search(r'\\', r'hello\there'))     # '\\' in r'hello\there' gives (5,6) - Because raw string interprets backslash as backslash
print(re.search(r'\\$', 'hellothere\'))     # \' & \" is also an escape sequence. So, python could not find end of string literal
print(re.search(r'\\', r'hellothere\'))     # python should consider backslash as backslash, but, python could not find end of string literal. No clue..

1 个答案:

答案 0 :(得分:1)

要获得所需的输出:

  1. 逐行读取文件。
  2. 如果最后一个字符是'\',则将其删除。
  3. 加入修改后的行。

以上操作应提供所需的结果。我认为使用正则表达式只会使解决方案变得复杂,而不会带来任何其他好处。

在词法分析中引用doc

  

如果存在'r'或'R'前缀,则后跟一个字符   字符串中包含反斜杠,无需更改,并且所有   反斜杠留在字符串中。例如,字符串文字   r“ \ n”由两个字符组成:反斜杠和小写字母'n'。   字符串引号可以用反斜杠转义,但是反斜杠   保留在字符串中;例如,r“ \”“是有效的字符串文字   由两个字符组成:反斜杠和双引号; r“ \”是   不是有效的字符串文字(即使原始字符串也不能以奇数结尾   反斜杠的数量)。具体来说,原始字串不能以   单反斜杠(因为反斜杠会转义以下引号   字符)。另请注意,单个反斜杠后跟换行符是   解释为这两个字符作为字符串的一部分,而不是   行继续。