除了在python中以字符串开头和结尾之外,删除多余的字符

时间:2015-04-06 20:49:47

标签: python

我有以下表格的数据:

"C def geh.#- ijk "<> ""^^xsd:date.

现在是上述字符串的最后一部分,即&#34; C def geh。# - ijk&#34;&lt;&gt; &#34;&#34; ^^ xsd:date - 即以引号开头和结尾的部分。我想保留开头和结尾的引号,并删除所有其他引号和&lt;&gt;等,除了#, - ,。,_,(,)之间。有人可以建议我该怎么做。我的预期输出应显示为:

"C def geh.#- ijk "^^xsd:date.

1 个答案:

答案 0 :(得分:1)

假设总会有匹配:

import re

def cleanup(str): 
    return ''.join(re.match('(\"[^\"]+\").*?(\^\^xsd\:date\.)', str).groups())

>>> s = """"C def geh.#- ijk "<> ""^^xsd:date."""
>>> cleanup(s)
'"C def geh.#- ijk "^^xsd:date.'

更新如果字符串末尾的点可能出现或可能不出现,请使用此(我忘记了美元符号以标记结尾):

def cleanup(str): 
    return ''.join(re.match('(\"[^\"]+\").*?(\^\^xsd\:date\.?)$', str).groups())

>>> s = '"1980-"05"-26"^^xsd:date'
>>> cleanup(s)
'"1980-"^^xsd:date'

如果你想在没有匹配的情况下处理这种情况(例如返回空字符串),那么就可以这样做:

def cleanup(str):
    try:
        return ''.join(re.match('(\"[^\"]+\").*?(\^\^xsd\:date\.?)$', str).groups())
    except AttributeError:
        return ''

>>> cleanup("asdfadf")
''

从OP获得更多解释后更新(需要清除第一个和最后一个引号之间的内容并保持其余部分不变):

def cleanup(str):
    left_index = s.find('\"')
    right_index = s.rfind('\"')
    if left_index==right_index: 
        return str
    else:
        cleaned = re.sub('[^0-9a-zA-Z\#\-\.\_\(\)]','',s[left_index+1:right_index])
        return str[:left_index+1]+cleaned+str[right_index:]

>>> cleanup(s)
'"1980-05-26"^^xsd:date'