我正在寻找text6中包含z或字符序列pt或以ize结尾的单词
我写了以下内容,但其中包含许多不符合上述标准的词语,如安抚,舞蹈,冒犯,执行.......为什么会这样?
SELECT SUM(`Qty in acquisto`) AS total,`Prezzo in acquisto`
FROM `book`
GROUP BY `Qty in acquisto`
HAVING COUNT(*) >5
在上一个练习中构建的另一个问题:我需要添加一个新的替代条件,即单词以1开头且只有1个大写字母。
我写了
L2=[w for w in text6 if re.search(r".*[z]|.*[p][t]|[ize]$",w)
它还包括大写单词(即大写字母中的所有字符)
这两个问题可以帮助吗?
提前谢谢
莫罗
答案 0 :(得分:2)
您正在迭代字符而非字词,因此您需要拆分文字。
你也可以在没有正则表达式的情况下完成所有这些工作:
from string import ascii_uppercase
def check_word(word):
return 'z' in word or 'pt' in word or word.endswith('ize') or word.startswith(tuple(ascii_uppercase))
[w for w in text6.split() if check_word(w)]
演示:
>>> text6 = "here are some example: appease dance offensive xxxize executive and other extra words optimum Python"
>>> [w for w in text6.split() if check_word(w)]
['xxxize', 'optimum', 'Python']
对于最后一个条件(单词以1开头,只有1个大写字母),如果你不想在单词中加上大写,那么你可以添加(word[1:].islower()
)check_word
功能:
def check_word(word):
return 'z' in word or 'pt' in word or word.endswith('ize') or (word.startswith(tuple(ascii_uppercase)) and word[1:].islower())
注意:如果您想要使用多个分隔符或基于其他条件分隔单词,可以使用re.findall()
来查找单词。
例如,以下正则表达式将包含单词字符的单词:
re.findall(r'\b\w+\b', my_str)
答案 1 :(得分:2)
我建议使用非正则表达式方法,因为正则表达式似乎比这个用例要求更复杂。
首先,您可以摆脱“ize
”约束中的“结束”,因为它包含z
中的任何单词。
text6 = [
'appease', 'dance', 'offensive', 'executive',
'inept', 'zoo', 'Inept', 'Zoo', 'INept', 'ZOo']
仅匹配带有小写pt
或z
的字词:
[w for w in text6 if 'pt' in w or 'z' in w] # ['inept', 'zoo', 'Inept', 'INept']
用于匹配上述案例以及仅大写字词:
[w for w in text6 if w.istitle() and ('pt' in w or 'z' in w)] # ['Inept']
当然,编写一个抽象出这个逻辑的函数可能会更好:
def meets_criteria(word):
return word.istitle() and ('pt' in word or 'z' in word)
[w for w in text6 if meets_criteria(w)]
如果您还希望匹配以Z
和Pt
开头的字词,则可以检查w.lower()
中的成员资格。
答案 2 :(得分:1)
您正在寻找的是:
[w for w in text6 if re.search(r"z|pt|ize$", w)]
这将捕获所有必需的单词。请注意,最后一部分不是必需的,因为匹配ize$
的任何字词也会匹配z
。基本上,表达式归结为:
[w for w in text6 if re.search(r"z|pt", w)]
第二种情况可以通过使用表达式^[A-Z]{1}[^A-Z]
来解决。也就是说,
以下使用:
[w for w in text6 if re.search(r"^[A-Z]{1}[^A-Z]|z|pt|ize$", w)]
或者,简单地说,
[w for w in text6 if re.search(r"^[A-Z]{1}[^A-Z]|z|pt", w)]