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