在python中,除了以字符串开头和结尾之外,还要删除额外的字符

2024-03-29 07:20:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据:

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

现在是上面字符串的最后一部分,即“C def geh.#-ijk”<;>;“”^^xsd:日期--i、 以引号开头和结尾的部分。我只想保留开头和结尾的引号,并删除除#、-、、、、(、)之外的所有其他引号和<;>;,等等。有人能建议我怎么做吗。我的预期输出应显示为:

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

Tags: 数据字符串ltgtdatedef结尾建议
1条回答
网友
1楼 · 发布于 2024-03-29 07:20:29

假设总会有匹配:

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'

相关问题 更多 >