如何替换出现在双引号内的所有"\n"
而不是那些不引用的origin = 'some text alt="description\n description\n description" \n other text'
?
re.sub(r'(alt=".*)\n(.*)"', r'\1\2', origin)
我试图像这样在python中解决它,但我发现我无法确定此模式中“\ n”的计数。
$ java -XX:CompileThreshold=1 -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:CompileCommand="compileonly pac/kage/MyClass myMethod" MyClass
答案 0 :(得分:1)
你应该两次通过。它会更简单,更易读,因为太聪明的正则表达式很难维护。
首先在双引号
中获取字符串qstrings = re.findall('"(.*?)"', origin, re.DOTALL)
然后你要处理简单的字符串:
for string in strings:
filtered_string = string.replace('\n', replacement_char)
# process filtered_string
答案 1 :(得分:0)
结合re.sub
可以使用str.replace
替换参数的函数的事实:
>>> re.sub(r'alt="[^"]*"', lambda x: x.group(0).replace('\n', ''), origin)
'some text alt="description description description" \n other text'
这会查找alt="any number of any characters except a double quote"
并将其替换为alt="the matched string but with newlines removed via str.replace"
。
如果您添加.*?
标记,也可以使用更通用的[^"]*
代替re.DOTALL
,这会使.
包含换行符:
>>> re.sub(r'alt=".*?"', lambda x: x.group(0).replace('\n', ''), origin, flags=re.DOTALL)
'some text alt="description description description" \n other text'
?
是在第一个结束引号处停止而不是一直到最后一个结束引号,这对于具有多个alt="...
的字符串很重要{{1} }}