python正则表达式两个字

时间:2015-03-26 14:49:30

标签: python regex

我有字符串数据的音调,想要在字符串中找到所有“iphone case”或“iPhone 6 case”或“iphone cases”,并使用regexp删除。

tweet=re.sub(r'iphone\s[case]+', 'DELETESENTENCE', tweet)
tweet=re.sub(r'[iphone\s]+[0-6]+[\scase]+', 'DELETESENTENCE', tweet)

我习惯了上面的正则表达式,后来我删除了所有文本,包括DELETESENTENCE

但我只是想知道更清晰的方式来清除文本,而不是单独杀死或单独替换模式

例如我有lst=['iPhone case', 'iPhone battery', 'iPhone film']

re(r'lst','DELETESENTENCE','tweet)< ==显然这不起作用。

4 个答案:

答案 0 :(得分:2)

不确定我是否理解,但这是否符合您的要求:

'iphone(?:\s+[0-6])?\s+cases?'

这将匹配:

iphone case
iPhone 6 case
iphone cases

答案 1 :(得分:2)

目前,你在正则表达式中存在一些问题。 [case]+表示“任何”c“,”a“,”s“,”e“字符1次或更多次”,我想这不是你想要的。

如果你想只能匹配2个单词“iphone”和“case”,你可以使用:

  tweet=re.sub(r'(?i)\b(?:iphone|case)\b', 'DELETESENTENCE', tweet)

如果你只需要删除用数字分隔的2个单词,那么

  tweet=re.sub(r'(?i)\biphone\s+[0-9]+\s+case\b', 'DELETESENTENCE', tweet)

答案 2 :(得分:2)

正则表达式可以加入"或"列#34; |"字符。 这应该适合你的情况:

tweet=re.sub('|'.join(lst), 'DELETESENTENCE', tweet)

答案 3 :(得分:1)

您希望匹配" IPhone",然后是可选的" 6",然后是" case"或"案例" (这也符合" iphone 6案例 s ",但我认为你不介意。)

而不是编辑字符串然后删除(环形交叉!),你可以这样做:

for tweet in tweets:
    if re.search(r"iphone\s+(6\s+)?cases?", tweet, re.IGNORECASE):
        <delete or mark message for deletion>

或者一步到位:

filtered_tweets = [ tweet for tweet in tweets if not 
    re.search(r"iphone\s+(6\s+)?cases?", tweet, re.IGNORECASE) ]