更换正则python中的精确分组部分
我有一个模板,需要使用 Python 中的正则表达式替换其中的一部分。这是我的模板:(请注意,两个注释之间至少有一个新行)
hello
how's everything
<!--POSTS:START-->
some text
<!--POSTS:END-->
Some code here
我想替换 和
<; 之间的所有内容。 !--POSTS:END-->Python 中的
。所以我制作了 \n([^;]*)\n
模式,但它包括 和
也是如此。
这就是我想要的:
re.sub('...', 'foo', message)
# expected result:
hello
how's everything
<!--POSTS:START-->
foo
<!--POSTS:END-->
Some code here
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用捕获组作为开始和结束标记,并在目标替换字符串中将其引用为 \1、\2 等。
如果文本多次出现
...
则使用.* 的正则表达式?
将替换每个组。如果'?'删除正则表达式,那么它将删除从第一组开头到最后一组结尾的所有文本。试试这个:
输出:
You can use a capture group for the start and end markers and reference those as \1, \2, etc in the target replacement string.
If the text has multiple occurrences of
<!--POSTS:START-->...<!--POSTS:END-->
then the regexp with.*?
will replace each of those groups. If the '?' is removed the regexp then it will remove all text from the start of the first group to the end of the last group.Try this:
Output:
检查此 https://docs.python.org/3/library/library/re.html
结果:
check this https://docs.python.org/3/library/re.html
result:
您可以使用以下内容:
旗帜dotall:制作'。'。特殊角色完全匹配任何角色,包括newline。
我正在使用两件事来完成您想要的
“?=”
:断言,在这里可以匹配给定的子图案,而不会消耗字符当我们使用LookAhead,
\ n&lt;! - 帖子:end - &gt;
时,我们将不会消耗所有模式,因此我只需要保留第一组并重写内容在比赛之间。这就是为什么我使用\ 1foo
而不是\ 1foo \ 2
,如果您仅修改第一匹配项,则可以使用
count = 1
您可以在这两行之间有任何东西,它将按预期工作
you can use the following:
The flags DOTALL: Make the '.' special character matches any character at all, including a newline.
I'm using two things to do what you want
"?="
: Asserts that the given subpattern can be matched here, without consuming charactersAs we are using lookahead,
\n<!--POSTS:END-->
will not be consumed so I only need to keep the first group and rewrite the content between the matches. That is why I'm using\1foo
and not\1foo\2
If you need to modify only the first match you can use
count=1
You can have anything between those two lines and it will work as expected