繁体   English   中英

除了在python中以字符串开头和结尾之外,删除其他字符

[英]Delete extra characters apart from starting and ending in a string in python

我有以下形式的数据:

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

现在,对于上述字符串的最后一部分,即“ C def geh。#-ijk” <>“” ^^ xsd:date-即以引号开头和结尾的部分。 我只想保留开头和结尾的引号,并删除所有其他引号和<>等,但它们之间的#,-,。,_,(,)除外。 有人可以建议我该怎么做。 我的预期输出应显示为:

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

假设总会有一个匹配项:

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.'

UPDATE如果字符串末尾的点可能出现也可能不会出现,请使用此命令(我忘记了美元符号来标记结尾):

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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM