我需要编写 python 风格的正则表达式来有条件地提取字段。以下是我需要从中提取的两种类型的测试字符串:
http://domain/string1/path/field_to_extract/path/filename
http://domain/string2/path/90020_10029/path/filename
以下是我的要求:
- 对于 string2,我们应该只选择第四个位置的数字,在斜杠 (/) 和 (_) 之间。
- 对于其他人,我们应该在第四个位置的斜线 (/) 之间选择整个文本。
我写了以下正则表达式:
(?i)^(?:[^ ]*(?: {1,2})){6}(?:[a-z]+://)(?:[^ /:]+[^ /]/:]+[^ /]+/[^ /]+/)?(?:[^ /]+/){2}(?P<field_name>(?<=/string2/)(?:[^/]+/)([^_]+)|((?<!/string2/)(?:[^/]+/)([^/]+)))
尽管条件提取似乎工作正常,但此正则表达式也匹配提取的字段之前的字符串。例如,当在第一个测试字符串上使用时,此正则表达式匹配path/field_to_extract
,而在第二个测试字符串上匹配path/90020
.
虽然我在必填字段之前添加了忽略组,但它似乎不起作用。
请帮助我正确使用正则表达式。