是否有更合理的方式来编写这个正则表达式?

时间:2013-10-26 02:53:07

标签: python regex

以下正则表达式用Python方言编写:

^(    )*#(\s+\S(.*\S)?)?$

任何人都可以看到更好的方法吗?对于那些不确定它是什么的人:

  • 匹配整行。
  • 这些行以四个空格的任意倍数开始。
  • 哈希标记跟随这些空格。
  • 哈希标记之后没有任何内容或以下内容:
    • 哈希标记后面至少有一个空白字符。
    • 一个非空白字符出现在那些之后。
    • 接下来没有任何内容或下列内容:
      • 跟随任意数量的字符。
      • 最后一个字符是非空白字符。

它可以简化吗?

^(    )*#(\s.*\S)?$

2 个答案:

答案 0 :(得分:5)

重写正则表达式以增强可读性的一种方法(减少计算连续空格的机会):

^( {4})*#(\s.*\S)?$

用@Noctis的话说,它缩短了编译器的调试输出。

(\s.*\S)?

获取(\s+\S(.*\S)?)?的程序

\s+ => \s(\s)*

\S(.*\S)? => \S\S.*\S => (\S.*)?\S

(\s+\S(.*\S)?)? => (\s(\s)*(\S.*)?\S)? => (\s.*\S)?因为(\s)*(\S.*)? => .*

答案 1 :(得分:4)

您可以随时使用re.VERBOSE标记,并将此处提供的说明添加为注释。 :)