2024-04-19 00:31:53 发布
网友
我试着构建一些可以检查代码的东西。 我如何构建一个正则表达式,例如只找到双空格而不是在开头 一行之间,而不是不均匀数"。 例如:
"
print(", ,", "l")
将只找到,和"之间的双间距 所以可以分为两个问题:
,
^
import re code = r""" print(", ,", "l") # comment spaces print(", ,", "l") # comment spaces """ print(re.sub(r""" [Rr]("(?!"")|'(?!'')|"{3}|'{3}).*?\1 # Raw strings | ("(?!"")|'(?!'')|"{3}|'{3})(?:\\.|[^\\])*?\2 # Normal strings | [ \t]*\#[^\r\n]* # Comments | ^[ \t]+ # Leading whitespace | [ \t]+$ # Trailing whitespace | ([ \t]{2,}) # Duplicate whitespace """, lambda m: m.group(0) if m.group(3) is None else ' ', code, flags = re.VERBOSE | re.DOTALL | re.MULTILINE))
输出:
print(", ,", "l") # comment spaces print(", ,", "l") # comment spaces
http://ideone.com/3ouQee
我们需要匹配并丢弃所有其他模式,这样我们就不会得到任何误报。只有在字符串内部、注释中以及行的开头和结尾才能出现双空格(我们不想替换它)。你知道吗
模式的第一行匹配Python原始字符串,包括单引号和双引号、普通行和多行。允许使用所有字符,但字符串开头的引号序列除外。
第二行匹配普通Python字符串(非原始),包括单引号和双引号、普通和多行。跳过转义(\")字符。否则,除反斜杠(\)和开始字符串的引号序列之外的所有字符。
\"
\
第三行匹配注释和任何前导空格。
第四行和第五行匹配前导和尾随空格。如果您还想修剪尾部的空白,可以删除第五行。
最后一行与我们实际要替换的内容匹配;按顺序有两个或多个空格。
替换项不是字符串,而是一个lambda函数,用于检查第三个组(模式中的最后一行)是否存在。如果不是,则替换为完全匹配(无更改)。如果组存在,则用单个空格替换。你知道吗
输出:
http://ideone.com/3ouQee
我们需要匹配并丢弃所有其他模式,这样我们就不会得到任何误报。只有在字符串内部、注释中以及行的开头和结尾才能出现双空格(我们不想替换它)。你知道吗
模式的第一行匹配Python原始字符串,包括单引号和双引号、普通行和多行。允许使用所有字符,但字符串开头的引号序列除外。
第二行匹配普通Python字符串(非原始),包括单引号和双引号、普通和多行。跳过转义(
\"
)字符。否则,除反斜杠(\
)和开始字符串的引号序列之外的所有字符。第三行匹配注释和任何前导空格。
第四行和第五行匹配前导和尾随空格。如果您还想修剪尾部的空白,可以删除第五行。
最后一行与我们实际要替换的内容匹配;按顺序有两个或多个空格。
替换项不是字符串,而是一个lambda函数,用于检查第三个组(模式中的最后一行)是否存在。如果不是,则替换为完全匹配(无更改)。如果组存在,则用单个空格替换。你知道吗
相关问题 更多 >
编程相关推荐