2024-03-29 07:20:29 发布
网友
我有以下数据:
"C def geh.#- ijk "<> ""^^xsd:date.
现在是上面字符串的最后一部分,即“C def geh.#-ijk”<;>;“”^^xsd:日期--i、 以引号开头和结尾的部分。我只想保留开头和结尾的引号,并删除除#、-、、、、(、)之外的所有其他引号和<;>;,等等。有人能建议我怎么做吗。我的预期输出应显示为:
"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.'
更新如果字符串末尾的点可能出现或不出现,请使用此选项(我忘记了用美元符号标记结尾):
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'
假设总会有匹配:
更新如果字符串末尾的点可能出现或不出现,请使用此选项(我忘记了用美元符号标记结尾):
如果要处理不匹配的情况(例如,返回空字符串),则可以这样做:
从OP获得更多解释后更新(需要清除第一个引号和最后一个引号之间的内容,并返回其余未更改的内容):
相关问题 更多 >
编程相关推荐