我正在使用上游系统,有时会向我发送用于HTML/XML输出的文本,其中包含未编码的&符号:
str1 = "Stay at this B&B"
str2 = "He’s going to Texas A&M"
str3 = "He’s going to a B&B and then Texas A&M"
Run Code Online (Sandbox Code Playgroud)
我需要替换未编码的&符号,&同时保留作为字符引用一部分或已编码的符号.
(修复上游系统不是一个选项,因为文本有时会到达部分编码,重新编码整个字符串也不是我能做的事情.我真的只想解决这个唠叨的问题并继续与我的生活)
这个正则表达式很好用,但我无法搞清楚语法re.sub:
re.findall("&[^#|amp]", str3)
Run Code Online (Sandbox Code Playgroud)
我不确定如何正确替换文字; 我有一种感觉它会涉及re.group但这是我的正则表达式foo中的一个弱点.
任何帮助表示赞赏.
Ala*_*ore 11
如果&符号是字符实体的一部分,则它可以是任何命名实体(不仅仅是&),十进制实体或十六进制实体.这应该涵盖它:
re.sub(r'&(?![A-Za-z]+[0-9]*;|#[0-9]+;|#x[0-9a-fA-F]+;)',
r'&', your_string)
Run Code Online (Sandbox Code Playgroud)
我建议对此使用否定前瞻.如果&后面跟着#xxxx;(其中x是数字)amp;,则会导致匹配失败,因此它只匹配独立&字符并将其替换为&.
re.sub(r"&(?!#\d{4};|amp;)", "&", your_string)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3744 次 |
| 最近记录: |