Python正则表达式来修改路径

时间:2014-07-24 10:21:57

标签: python regex

我需要用我的字符串替换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)进行处理。

2 个答案:

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

DEMO

示例:

>>> 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"/>'