如何替换引号字符串中的所有换行使用正则表达式?

时间:2015-12-13 07:00:51

标签: python regex

如何替换出现在双引号内的所有"\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

2 个答案:

答案 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} }}