我需要用我的字符串替换XML文件中的一些路径。
要更改的所有路径均以schemaLocation=
或location=
开头,后跟带扩展名的路径和文件名。
一些例子:
FROM
'schemaLocation="http://docs.oasis-open.org/wsn/b-2.xsd"/>' (1)
or
'schemaLocation=
"http://docs.oasis-open.org/wsn/b-2.xsd"/>' (2)
or
'schemaLocation="b-2.xsd"/>' (3)
TO
'schemaLocation="b-2.xsd"/>' (4) in this sample new path is clear
or
'schemaLocation="../xsd/b-2.xsd"/>' (5) where "../xsd/" is new path
我写了
regex = '(?<=schemaLocation=)([\s]*[\r\n]*[\s]*".*[/]?)(?=.+[.]xsd["])'
但是我无法修改它以从(3)到(5)进行处理。
答案 0 :(得分:0)
原始文本是XML的事实似乎并没有在这里发挥作用。 你可以使用re.sub的一个相当不错的功能,即传递一个 用于计算替换字符串的函数。 例如:
import re
text = "...." # your text
r = re.compile('(schemaLocation=")([^"]+)"')
def repl(matchobj):
if matchobj.group(2) == 'types.xsd':
s = '../xsd/b-2.xsd'
else:
s = '...' # other cases
return matchobj.group(1) + s
out = r.sub(repl, text)
答案 1 :(得分:0)
正则表达式:
(schemaLocation=)\s*\"(.*\/)?(.*\")(.*)
替换字符串:
\1"\3\4
示例:强>
>>> s = """schemaLocation=
... "http://docs.oasis-open.org/wsn/b-2.xsd"/>"""
>>> re.sub(r'(schemaLocation=)\s*\"(.*\/)?(.*\")(.*)', r'\1"\3\4', s, re.M)
'schemaLocation="b-2.xsd"/>'