【问题标题】:How to remove a string, between two delimiters, at the end of a line?如何在行尾删除两个分隔符之间的字符串?
【发布时间】:2020-07-29 20:37:19
【问题描述】:

所以我想删除规则中的最后一条语句,规则结构如下:

<pattern> @rule statements go here@ @multiple rule statements@ @remain all on the same line@</pattern>

解析语句总是在@字符之间,我想删除该行中的最后一条语句。

我可以使用正则表达式删除@字符之间的所有内容:

re.sub(r'@.+?@', '', s)

当每一行彼此不同时,我怎样才能只为该行中的最后一个语句实现这一点?

【问题讨论】:

  • 还要考虑简单的字符串处理:rfind 和切片。
  • 明确一点,最后的字符串每条规则都不一样,无法显式搜索。我还没有研究 rfind 或 slicing,所以我无法评论它们的有效性,我只是想澄清任何潜在的误解。

标签: python parsing syslog-ng


【解决方案1】:
(\@[^\@]+)\@?$

上面的正则表达式将搜索最后一次出现的@然后向后工作以实现最后一次@string@发生的完全匹配,在下面的示例字符串中“@remain all on the same line@”将被匹配

@rule statements go here@ @multiple rule statements@ @remain all on the same line@

【讨论】:

    【解决方案2】:

    使用negative lookahead assertion,我们可以确保只删除最后一次出现:

    re.sub(r'@[^@]+@(?!.*@)', '', s)
    

    (请注意,我需要将.+? 更改为[^@]+ 以明确排除@,否则它将一次匹配所有@statements@。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2012-11-15
      • 2014-04-06
      相关资源
      最近更新 更多