如何删除一行末尾两个定界符之间的字符串?

How to remove a string, between two delimiters, at the end of a line?

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

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

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

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

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

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

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

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

(请注意,我需要将 .+? 更改为 [^@]+ 以显式排除 @,否则它会立即匹配所有 @statements@。)

(\@[^\@]+)\@?$

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

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