【问题标题】:Is there a way to write regex to avoid matching a # inside a string有没有办法编写正则表达式来避免在字符串中匹配 #
【发布时间】:2021-12-13 14:12:19
【问题描述】:

我正在为 Python 编写语法突出显示,并且我想让 cmets 仅在字符串中不包含时才突出显示为 cmets。 目前正在发生的事情:

# this line will be matched
x = '# this line is matched from `#` onwards'

但是,如果# 周围没有'",我希望它只选择要匹配的行。

example 我当前的正则表达式如下:#[^\n]* 选择# 和之后的所有内容,但我不知道如何让它首先检查周围的'

【问题讨论】:

  • 你已经知道如何测试\n是否不在字符串中;这有什么不同?
  • Regex 不是编写语法高亮的最佳选择;像这样的问题会不断地绊倒你。你需要看看写一个词法分析器/解析器。
  • 如果语法高亮器也在 Python 中,实际上只需使用 ast.parse;尽管如此,现在大多数编辑器等确实只支持正则表达式来突出显示语法。

标签: python regex


【解决方案1】:

要检查是否有东西被包围,您可以使用后向和前瞻:

pattern = (?<=['|\"]).*#.*(?=['|\"])

(?

(?) 这同样适用于这个,除了这个之后而不是之前

当 '#' 被 this ' 或 this "包围时,此模式将匹配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多