Kev*_*ers 3 python regex replace
我真的可以使用Python正则表达式问题的一些帮助.你期待结果
import re
re.sub("s (.*?) s", "no", "this is a string")
Run Code Online (Sandbox Code Playgroud)
是"这不是字符串",对吧?但实际上它是"瘦身".子函数使用整个模式作为要替换的组,而不仅仅是我想要替换的组.
所有re.sub示例都涉及简单的单词替换,但如果您想根据字符串的其余部分更改某些内容,该怎么办?就像我的例子一样......
任何帮助将不胜感激.
编辑:
在我的情况下,后视和前瞻技巧不起作用,因为那些需要固定宽度.这是我的实际表达:
re.sub(r"<a.*?href=['\"]((?!http).*?)['\"].*?>", 'test', string)
Run Code Online (Sandbox Code Playgroud)
我想用它来查找字符串中不以http开头的所有链接,所以我可以在这些链接前面添加一个前缀(使它们绝对而不是相对).
你的正则表达式匹配从第一个s到最后一个s的所有内容,所以如果用"no"替换匹配,你就会得到"thinotring".
括号不限制匹配,它们在称为反向引用的特殊变量中捕获与它们内部的任何内容匹配的文本.在您的示例中,反向引号1将包含is a.你可以使用反斜杠和反向引用的数量在后面的同一个正则表达式中引用反向引用:\1.
你可能想要的是环顾:
re.sub(r"(?<=s ).*?(?= s)", "no", "this is a string")
Run Code Online (Sandbox Code Playgroud)
(?<=s )表示:断言可以s在字符串中的当前位置之前匹配,但不要使其成为匹配的一部分.
相同(?= s),但它断言字符串将s在当前位置后继续.
请注意,Python中的lookbehind仅限于固定长度的字符串.因此,如果这是一个问题,你可以使用... 反向引用来解决这个问题!
re.sub(r"(s ).*?( s)", r"\1no\2", "this is a string")
Run Code Online (Sandbox Code Playgroud)
好的,这是一个人为的例子,但它显示了你能做什么.从您的编辑开始,您正在尝试使用正则表达式解析HTML.现在这不是一个好主意.搜索SO的"正则表达式html",你会明白为什么.
如果你还想这样做:
re.sub(r"(<a.*?href=['"])((?!http).*?['"].*?>)", r'\1http://\2', string)
Run Code Online (Sandbox Code Playgroud)
可能有用.但这非常脆弱.
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |