Python:正则表达式,忽略具有特定单词的文本

时间:2014-01-06 06:21:42

标签: python regex

我有以下文本,存储在名为

的字典条目中
info['growing_info']
  

萝卜需要易碎,排水良好的土壤,pH范围为   5.8-6.8。在季节的任何时间播种,从早春开始。使用2-3“宽带,种子约3 / 4-1”(约35种子/英尺。   除了10粒种子/英尺。适用于624 Red Meat和616 Nero Tondo),1/2“深,   行1'分开,或任何将消除的行或床上用品计划   未种植的地面,以阻止杂草。萝卜受到不利影响   炎热干燥的天气。它们仅在几天内保持良好状态   应该用充足的水分快速生长,温和,   温柔,有吸引力。如果检查生长,根可能会变硬,   简洁,太辣了。

我想要一个会返回...的正则表达式。

>>>seed_spacing.group(1)
>>>1
>>>seed_spacing.group(2)
>>>"

我目前的尝试是

seed_spacing = re.search(r'(?:Sow|sow|transplant|Transplant).+(?!rows).+([\d]+)(\'|") apart',info['growing_info'])

没有返回我想要的结果。我知道点字符的松散使用是有害的,但我不知道如何继续。

2 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

re.search(r'(?:sow|transplant).+?(\d+)(\'|") apart', info['growing_info'], re.I)

regex101 demo

我做了一些修改,即:

  • 添加了ignorecase标志,以便您可以使用(?:sow|transplant)
  • 已移除(?!rows).+;它没有做任何事情,并将.+更改为.+?以进行懒惰匹配。

如果您希望绝对避免在匹配的文本中使用rows,请改用:

re.search(r'(?:sow|transplant)(?:(?!rows).)+(\d+)(\'|") apart', info['growing_info'], re.I)

(?:(?!rows).)将匹配除rows以外的任何字符。


.+(?!rows).+

不起作用,因为(?!rows)没有检查任何.+匹配的每个字符。以下是它的工作原理(粗体部分表示到目前为止匹配的内容):

  1. 正则表达式尝试匹配(?:sow|transplant)并找到它

      

    萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 播种在季节的任何时候,从早春开始。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

  2. 接下来是.+,这意味着,匹配每个角色(贪婪):

      

    萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辛辣。

  3. 接下来是(?!rows)。正则表达式检查并发现最后没有rows

  4. 接下来是.+。正则表达式必须回溯1个字符以允许这个匹配:

      

    萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣

    然后将最后一个字符与.+

    匹配
      

    萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辛辣。

  5. 接下来是(\d+),因此正则表达式会查找数字,但无法找到任何数字。由于它无法使用第二个.+回溯,因此它将从第一个.+回溯:

      

    萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,行 1'分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

  6. 检查(?!rows)。一切都很清楚,因为前面没有rows。它将空格与第二个.+匹配,然后将数字与(\d+)匹配,然后匹配引号。


  7. (?:(?!rows).)
    

    以下是它的工作原理:

    1. 正则表达式尝试匹配(?:sow|transplant)并找到它

        

      萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 播种在季节的任何时候,从早春开始。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

    2. 接下来是(?:(?!rows).),这意味着,匹配一个字符并确保每个字符前面没有rows(让我们说它与两个字符匹配+,因为空格不能变为粗体):

        

      萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 在赛季期间的任何时间,从早春开始播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

      由于没有rows,请继续重复此组。这一直持续到:

        

      萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,行1'分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

    3. 现在它无法前进,因为前面有rows。因此,它继续使用正则表达式的其他部分:(\d+)。因此它回溯到:

        

      萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,用于624红肉和616尼禄东),1 / 2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

    4. 并匹配(\d+)(\'|")。但是,没有apart匹配,因此在(\d+)(\'|") apart匹配之前会继续回溯:

        

      萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,用于624红肉和616 Nero Tondo),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。

答案 1 :(得分:-1)

删除\ d。

周围的方括号