Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有更合理的方法来编写这个正则表达式?_Python_Regex - Fatal编程技术网

Python 有没有更合理的方法来编写这个正则表达式?

Python 有没有更合理的方法来编写这个正则表达式?,python,regex,Python,Regex,以下正则表达式是用Python方言编写的: ^( )*#(\s+\S(.*\S)?)?$ 有谁能想出更好的办法来解决这个问题吗?对于那些不确定它在说什么的人: 它匹配一整行 这些线以四个空格的任意倍数开始 这些空格后面有一个哈希标记 哈希标记后面没有内容或出现以下内容: 哈希标记后面至少有一个空白字符 一个非空白字符位于这些字符之后 要么什么都没有,要么接下来是: 后面跟着任意数量的字符 最后一个字符是非空白字符 它还能比这更简单吗 ^( )*#(\s.*\S)?$

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

^(    )*#(\s+\S(.*\S)?)?$
有谁能想出更好的办法来解决这个问题吗?对于那些不确定它在说什么的人:

  • 它匹配一整行
  • 这些线以四个空格的任意倍数开始
  • 这些空格后面有一个哈希标记
  • 哈希标记后面没有内容或出现以下内容:
    • 哈希标记后面至少有一个空白字符
    • 一个非空白字符位于这些字符之后
    • 要么什么都没有,要么接下来是:
      • 后面跟着任意数量的字符
      • 最后一个字符是非空白字符
它还能比这更简单吗

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

您可以始终使用该标志,并将您在此处给出的解释添加为注释。:)

重写regexp以增强可读性(减少连续空格计数的机会)的一种方法:

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

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

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

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


(\s+\s(.*\s)?
=>
(\s)*(\s.*)\s)?
=>
(\s.*\s)?
因为据我所知,历史上没有人称赞过regexps的可读性;-)我想你有的很好。我没有立即找到一种方法来浓缩它。不过,我会将这些要点作为注释放在某个地方。这一点怎么样?
^({4})*#(\s.*\s)?$
,尽管regexp的长度没有减少?@NeerajT:至少编译器调试输出更短。因此绝对不允许使用尾随空格。
(\s.*\s)?
替换
(\s+\s(.*\s)?)?
是我心目中最大的可读性赢家。如果没有这一点,两个单独的模式可能“要么什么都没有,要么在散列标签后面出现以下内容:”可能有意义。
^( {4})*#(\s.*\S)?$