![](/img/trans.png)
[英]Python: Remove substrings from string starting and ending with certain words
[英]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.