用于匹配奇数个连续反斜杠的Python正则表达式

时间:2017-03-04 15:59:09

标签: python regex

我想找到所有奇数连续的反斜杠。

我尝试了以下表达式:

(?<!\\)(\\)(?!\\)

但是,它匹配单个反斜杠(如果存在)。

3 个答案:

答案 0 :(得分:2)

你也可以试试这个:

(?<!\\)(?:\\{2})*\\(?!\\)

Explanation

  1. (?<!\\)当前位置背面没有反斜杠
  2. (?:\\{2})匹配每个连续的反斜杠对,零 或更多场合
  3. \\匹配单个反斜杠
  4. (?!\\)然后检查是否没有立即反斜杠

答案 1 :(得分:1)

您可以使用

r'(?<!\\)\\(?:\\{2})*(?!\\)'

请参阅regex demo

<强>详情:

  • (?<!\\) - 在当前位置之前不会出现反斜杠
  • \\ - 单个反斜杠
  • (?:\\{2})* - 0次或更多次出现2个反斜杠
  • (?!\\) - 没有\可以立即显示在当前位置的右侧。

请注意,在Python中,在正则表达式模式中使用文字反斜杠时最好使用原始字符串文字(减少转义次数并使模式看起来更整洁,并避免任何与错误解释的反斜杠相关的问题。)< / p>

答案 2 :(得分:0)

如果你正在寻找速度,那么最好的基准:
\\(?<!\\\\)(?:\\\\)*(?!\\)

Regex1:   \\(?<!\\\\)(?:\\\\)*(?!\\)
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.23 s,   229.23 ms,   229231 µs

Regex2:   (?<!\\)\\(?:\\{2})*(?!\\)
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    0.83 s,   829.68 ms,   829684 µs

Regex3:   (?<!\\)(?:\\{2})*\\(?!\\)
Options:  < none >
Completed iterations:   50  /  50     ( x 1000 )
Matches found per iteration:   3
Elapsed Time:    1.09 s,   1086.34 ms,   1086340 µs