找不到字符串正则表达式python3

2024-04-19 00:31:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着构建一些可以检查代码的东西。 我如何构建一个正则表达式,例如只找到双空格而不是在开头 一行之间,而不是不均匀数"。 例如:

print(",  ,",  "l")

将只找到,"之间的双间距 所以可以分为两个问题:

  1. 不是一开始(^是开始,但不是问题不是也不是吗?)你知道吗
  2. 不在"的不均匀数之间。 谢谢

Tags: 代码空格print间距
1条回答
网友
1楼 · 发布于 2024-04-19 00:31:53
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函数,用于检查第三个组(模式中的最后一行)是否存在。如果不是,则替换为完全匹配(无更改)。如果组存在,则用单个空格替换。你知道吗

相关问题 更多 >