在Python中使用条件提取文本
我已经研究了很多,找不到一个正则表达式,我可以实现以下条件所需的文本 我有一段很长的文字,我想在一定条件下提取文字: 提取的文本应以单词列表开头。苹果、香蕉、桔子、菠萝。 当遇到其他3个单词中的任何一个并且前面有一个数字时,它应该以结尾。 仅当前面有数字时,才应开始提取。 示例文本: 我包里有两个苹果,苹果是很好吃的食物。你这个笨蛋 每天吃苹果。这对健康很有好处。香蕉也不错。 它可以减少脂肪 以下是例外输出 我包里的苹果和苹果都很棒……对健康有好处 香蕉也很好。它可以减少脂肪 所以,如果有2个关键字存在,我想创建2个文件,依此类推 更新我尝试的内容: 我尝试的正则表达式是:在Python中使用条件提取文本,python,regex,python-3.x,Python,Regex,Python 3.x,我已经研究了很多,找不到一个正则表达式,我可以实现以下条件所需的文本 我有一段很长的文字,我想在一定条件下提取文字: 提取的文本应以单词列表开头。苹果、香蕉、桔子、菠萝。 当遇到其他3个单词中的任何一个并且前面有一个数字时,它应该以结尾。 仅当前面有数字时,才应开始提取。 示例文本: 我包里有两个苹果,苹果是很好吃的食物。你这个笨蛋 每天吃苹果。这对健康很有好处。香蕉也不错。 它可以减少脂肪 以下是例外输出 我包里的苹果和苹果都很棒……对健康有好处 香蕉也很好。它可以减少脂肪 所以,如果有2个关
(?=(\d+)(\s?)apple)(.*)(?=\d+\s?banana:?s)
我这里有两个问题:
在提取的文本中,我不想要第一个数字
如果我有4个单词,我不需要写那么多的组合,如果我们正在搜索苹果,那么为它提取的文本将保存在该变量中
Python版本:3.5
你能帮我用一个正则表达式吗?试试这个:\d+\s*?:苹果|香蕉|橙色|菠萝?\b[\s\s]*?=$|\d+\s*?:苹果|香蕉|橙色|菠萝?\b
见:
守则:
import re
regex = r"\d+\s*((?:Apple|Banana|Orange|Pineapple)s?\b[\s\S]*?)(?=$|\d+\s*(?:Apple|Banana|Orange|Pineapple)s?\b)"
test_str = "I have 2 apples in my bag and apples are great food toeat. you shud eat apples daily. it is very good for health. 3 bananas are also good. it reduces fat."
matches = re.findall(regex, test_str, re.MULTILINE | re.IGNORECASE)
for match in matches: print(match + "\n")
注意:我假设您希望停止匹配新行字符。如果情况并非如此,您可以删除re.MULTILINE标志,以便$匹配字符串的结尾。如果您是向下投票,请提供重复的问题。我很高兴删除这个问题,因为我已经完成了我的分析,而且我对regexYou是一个新手。因为您没有尝试过任何代码,并且希望整个代码都由其他人编写,所以您的票数下降。阅读有关regex的内容,花点精力编写代码,如果遇到困难,请回到这里寻求解决方案。@serbia99:添加了我迄今为止尝试过的内容脱离上下文,单个regexp不是。。。写代码的一些努力…:,至少不在我的书中。你已经读过了吗?老实说,整件事都是关于一个好的正则表达式的,这就是我正在尝试的,我的后期编辑工作非常好,唯一的问题是如果我把我的字符串改为我的包里有2个苹果和1个苹果….xx。。。然后它会给一个匹配。我在看如果我们在找苹果,只有当它得到苹果以外的东西时,它才会给出一个匹配