我有一个字符串:
{
"code": 102,
"error": "field recommendations cannot be included because it is not a pointer to another object"
}
我想删除除'class="a", class="b", class="ab", class="body", class="etc"'
和class="a"
以外的所有内容。
我该怎么办?我认为这个问题很容易,但我被困住了。
以下是我的一些尝试,但它并没有解决我的问题:
class="b"
我的字符串是一个非常长的HTML代码,包含很多类,我想只保留其中两个,然后删除所有其他类。 有时候好好休息一下。我用漂白剂找到了解决方案
re.sub(r'class="also"|class="etc"', '', a)
答案 0 :(得分:0)
如果您只想保留前两个条目,一种方法是使用split()
函数。这会将您的字符串拆分为给定分隔符点的list
。在你的情况下,这可能是一个逗号。然后可以将前两个列表元素与逗号连接在一起。
text = 'class="a", class="b", class="ab", class="body", class="etc"'
print ",".join(text.split(",")[:2])
会给class="a", class="b"
如果条目可以在任何地方,并且任意列表的任意列表:
def keep(text, keep_list):
keep_set = set(re.findall("class\w*=\w*[\"'](.*?)[\"']", text)).intersection(set(keep_list))
output_list = ['class="%s"' % a_class for a_class in keep_set]
return ', '.join(output_list)
print keep('class="a", class="b", class="ab", class="body", class="etc"', ["a", "b"])
print keep('class="a", class="b", class="ab", class="body", class="etc"', ["body", "header"])
这将打印:
class="a", class="b"
class="body"
答案 1 :(得分:0)
您尝试显式枚举要删除的子字符串。您可以使用否定前瞻,而不是编写这么长的模式,这样可以为一些更通用的模式添加排除项。
这是一个正则表达式,您可以使用它以干净的方式删除这些子串并忽略顺序:
,? ?\bclass="(?![ab]")[^"]+"
请参阅regex demo
此处,对于(?![ab]")[^"]+
,我们匹配"
([^"]+
)以外的1个或多个字符,但不匹配等于a
或b
的字符( (?![ab]")
)。
以下是示例代码:
import re
p = re.compile(r',? ?\bclass="(?![ab]")[^"]+"')
test_str = "class=\"a\", class=\"b\", class=\"ab\", class=\"body\", class=\"etc\"\nclass=\"b\", class=\"ab\", class=\"body\", class=\"etc\", class=\"a\"\nclass=\"b\", class=\"ab\", class=\"body\", class=\"a\", class=\"etc\""
result = re.sub(p, '', test_str)
print(result)
请参阅IDEONE demo
注意:如果您的序列较长,而不是a
和b
,请在预测中使用(?!(?:a|b)
非捕获组,而不是字符类:
,? ?\bclass="(?!(?:arbuz|baklazhan)")[^"]+"
请参阅another demo
答案 2 :(得分:0)
另一个非常简单的解决方案..祝你好运。
st = 'class="a", class="b", class="ab", class="body", class="etc"'
import re
res = re.findall(r'class="[a-b]"', st)
print res
'['class="a"', 'class="b"']'
你可以很容易地使用re.sub
res = re.sub(r'class="[a-zA-Z][a-zA-Z].*"', "", st)
print res
class="a", class="b"