我有以下文本,存储在名为
的字典条目中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'])
没有返回我想要的结果。我知道点字符的松散使用是有害的,但我不知道如何继续。
答案 0 :(得分:4)
您可以使用此正则表达式:
re.search(r'(?:sow|transplant).+?(\d+)(\'|") apart', info['growing_info'], re.I)
我做了一些修改,即:
(?:sow|transplant)
(?!rows).+
;它没有做任何事情,并将.+
更改为.+?
以进行懒惰匹配。如果您希望绝对避免在匹配的文本中使用rows
,请改用:
re.search(r'(?:sow|transplant)(?:(?!rows).)+(\d+)(\'|") apart', info['growing_info'], re.I)
(?:(?!rows).)
将匹配除rows
以外的任何字符。
.+(?!rows).+
不起作用,因为(?!rows)
没有检查任何.+
匹配的每个字符。以下是它的工作原理(粗体部分表示到目前为止匹配的内容):
正则表达式尝试匹配(?:sow|transplant)
并找到它
萝卜需要易碎,排水良好的土壤,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行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辛辣。
接下来是(?!rows)
。正则表达式检查并发现最后没有rows
。
接下来是.+
。正则表达式必须回溯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行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辛辣。
接下来是(\d+)
,因此正则表达式会查找数字,但无法找到任何数字。由于它无法使用第二个.+
回溯,因此它将从第一个.+
回溯:
萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,行 1'分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。
检查(?!rows)
。一切都很清楚,因为前面没有rows
。它将空格与第二个.+
匹配,然后将数字与(\d+)
匹配,然后匹配引号。
(?:(?!rows).)
以下是它的工作原理:
正则表达式尝试匹配(?:sow|transplant)
并找到它
萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 播种在季节的任何时候,从早春开始。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,624红肉和616尼龙托),1/2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。
接下来是(?:(?!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'分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。
现在它无法前进,因为前面有rows
。因此,它继续使用正则表达式的其他部分:(\d+)
。因此它回溯到:
萝卜需要易碎,排水良好的土壤,pH范围为5.8-6.8。 从早春开始,在季节的任何时间播种。使用2-3"宽带,种子约3 / 4-1"分开(约35粒种子/英尺,除了10种子/英尺,用于624红肉和616尼禄东),1 / 2"深,第1行和第3行分开,或任何行或床上用品计划,将消除未种植的土地,以阻止杂草。天气炎热干燥会对萝卜产生不利影响。它们仅在几天内保持在最佳状态,并且应该在充足的水分下快速生长,温和,柔软,有吸引力。如果检查生长,根可能变得坚韧,精悍,太辣。
并匹配(\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。
周围的方括号