我有一个看起来像这样的字符串
"word1 AND word2 AND word3 AND word4"
"word1 OR word3 AND word4"
"word1 word3"
我想在出现时从字符串中删除word3
。为此,我正在使用以下代码
regex = re.compile(re.escape('word3'), re.IGNORECASE)
keywords = regex.sub('', keywords)
如果出现AND
或OR
单词,我也想删除它们出现在word3
之前。无法弄清楚该怎么做。
我需要的输出是
"word1 AND word2 AND word4"
"word1 AND word4"
"word1"
在某些极端情况下,word3
是字符串中的第一个单词。在这种情况下,应该删除第一个AND / OR(如果存在)之后
"word3 AND word4 or word1"
应该成为
"word4 or word1"
答案 0 :(得分:3)
在转义的输入之前放置一个可以包含var array1 = [apples,oranges,grapes,vegetables,soups]
var arraylist = [[apples,oranges,grapes],[vegetables,soups]]
或' AND'
的可选组:
' OR'
输出:
keywords = "word1 AND word2 AND word3 AND word4"
regex = re.compile('(?:and |or )?' + re.escape('word3') + ' ?', re.IGNORECASE)
keywords = regex.sub('', keywords)
print(keywords)
答案 1 :(得分:3)
\s*(?:AND|OR)?\s*word3
说明:
\s*
首先会删除开头的空格。(?:AND|OR)?
匹配AND
或OR
(如果存在)\s*
允许word3
之前的空格您应该将其替换为""
。
答案 2 :(得分:0)
这是最接近可行答案的答案:
keywords = "word3 AND word3 OR word2 AND word1 AND word3 OR word4 AND word3"
keywords = re.sub(r'(?:(?:and|or) )?word3\s*', '', keywords, flags=re.I)
keywords = re.sub(r'^\s*(?:and|or)\s*', '', keywords, flags=re.I)
print(keywords)
word2 AND word1 AND word4
首先,我们进行类似于其他答案的替换,以删除word3
项。在这种情况下,我会寻找一个可能同时删除的AND|OR
前置词。但是,有一个极端的情况,例如
word3 AND word2 OR word1
在这里,我们将得到以下结果:
AND word2 OR word1
因此,我对re.sub
进行了 second 调用,以删除可能仍存在的前导分隔符。
此答案仍然存在问题。在我的示例输入中:
word3 AND word3 OR word2 AND word1 AND word3 OR word4 AND word3
立即删除所有word3
项而没有删除分隔符将导致以下情况:
word2 AND word1 AND OR word4
换句话说,我们不清楚应该选择AND
与OR
来分隔word1
和{{1}的 分隔符}。
答案 3 :(得分:0)
您可以尝试使用replace
功能。
s = "word1 AND word2 AND word3 AND word4"
s.replace(" AND word3", "").replace(" OR word3","").replace(" word3","")
'word1 AND word2 AND word4'
答案 4 :(得分:0)
我们需要使用具有多个匹配项的正则表达式。请仔细阅读以下文档
https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch05s02.html
keywords = "word1 AND word2 AND word3 AND word4" +"word1 OR word3 AND word4"+"word1 word3"
re.sub(r'\s*word3(?: (?:and|or))?', '', keywords)