[英]python regex two words
我有字符串數據的色調,想要在字符串中查找所有“ iphone外殼”或“ iPhone 6外殼”或“ iphone外殼”,並使用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)
<==顯然不起作用。
不確定我是否了解,但這是否就是您想要的:
'iphone(?:\s+[0-6])?\s+cases?'
這將匹配:
iphone case
iPhone 6 case
iphone cases
現在,您在正則表達式中存在一些問題。 [case]+
意思是“ c個,a個,s個,e個字符中的任何一個字符1次或多次”,我想這不是您想要的。
如果您只想匹配兩個單詞“ iphone”和“ case”,則可以使用:
tweet=re.sub(r'(?i)\b(?:iphone|case)\b', 'DELETESENTENCE', tweet)
如果您只需要刪除兩個以數字分隔的單詞,則
tweet=re.sub(r'(?i)\biphone\s+[0-9]+\s+case\b', 'DELETESENTENCE', tweet)
正則表達式可以通過“或”條件與“ |”列連接 字符。 這應該在您的情況下工作:
tweet=re.sub('|'.join(lst), 'DELETESENTENCE', tweet)
您要匹配“ IPhone”,然后匹配可選的“ 6”,然后匹配“ case”或“ cases”(這也匹配“ iphone 6 case 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) ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.