首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python替换标记之间的所有

python替换标记之间的所有
EN

Stack Overflow用户
提问于 2014-11-10 12:02:49
回答 3查看 643关注 0票数 0

我正在寻找一个python正则表达式,它将用patternend之间的replace_pattern替换所有出现的start

示例:

代码语言:javascript
运行
复制
start fkdsjflsd pattern jdflsdjf pattern end

威尔·耶尔德

代码语言:javascript
运行
复制
start fkdsjflsd replace_pattern jdflsdjf replace_pattern end

我在一个for循环中成功地做到了这一点:

代码语言:javascript
运行
复制
pattern = 'start(?P<before1>.*)' + pattern
while re.findall(pattern, content, flags=re.DOTALL | re.IGNORECASE):

    repl = 'start\g<before1>' + replace_pattern
    content = re.sub(pattern, repl, content, flags=re.DOTALL | re.IGNORECASE)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-10 12:17:31

如果开始和结束字符串或正确括起来,那么您可以使用下面的正则表达式来匹配字符串pattern。然后通过pattern函数用replace_pattern替换匹配的字符串re.sub

代码语言:javascript
运行
复制
(?<!\S)pattern(?!\S)(?=(?:(?!(?<!\S)(?:start|end)(?!\S)).)*?(?<!\S)end(?!\S))

演示

代码语言:javascript
运行
复制
In [6]: import re

In [7]: s = "pattern foo start fkdsjflsd pattern jdflsdjf pattern end pattern"

In [8]: re.sub(r'(?<!\S)pattern(?!\S)(?=(?:(?!(?<!\S)(?:start|end)(?!\S)).)*?(?<!\S)end(?!\S))', r'replace_pattern', s)
Out[8]: 'pattern foo start fkdsjflsd replace_pattern jdflsdjf replace_pattern end pattern'
票数 1
EN

Stack Overflow用户

发布于 2014-11-10 12:14:56

代码语言:javascript
运行
复制
\bpattern\b(?=(?:(?!\bend\b|\bstart\b).)*\bend\b(?:(?:(?!\bstart\b|\bend\b).)*\bstart\b(?:(?!\bend\b|\bstart\b).)*\bend\b)*(?:(?!\bstart\b|\bend\b).)*$)

尝试this.See演示。

http://regex101.com/r/tF5fT5/30

代码语言:javascript
运行
复制
    import re
p = re.compile(ur'pattern(?=(?:(?!\bend\b|\bstart\b).)*\bend\b(?:(?:(?!\bstart\b|\bend\b).)*\bstart\b(?:(?!\bend\b|\bstart\b).)*\bend\b)*(?:(?!\bstart\b|\bend\b).)*$)', re.IGNORECASE)
test_str = u"pattern start fkdsjflsd pattern jdflsdjf pattern end pattern"
subst = u"replace_pattern"

result = re.sub(p, subst, test_str)
票数 1
EN

Stack Overflow用户

发布于 2014-11-10 12:30:33

有一种方法:

代码语言:javascript
运行
复制
>>> import re
>>> a='start fkdsjflsd pattern jdflsdjf pattern end'
>>> re.sub(r'(start\s+.*?)pattern\s+(.*?end)',r'\1 replace_pattern \2',a)
'start fkdsjflsd  replace_pattern jdflsdjf pattern end'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26843404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档