如何在正则表达式中应用条件
Posted
技术标签:
【中文标题】如何在正则表达式中应用条件【英文标题】:How to apply Condition in regex 【发布时间】:2015-11-06 10:17:11 【问题描述】:您好,我是新手,目前正在尝试通过尝试各种模式来了解正则表达式模式。我试图为此网址创建正则表达式模式但失败了。是亚马逊的分页链接。
http://www.amazon.in/s/lp_6563520031_pg_2?rh=n%3A5866078031%2Cn%3A%215866079031%2Cn%3A6563520031&page=2s&ie=UTF8&qid=1446802571
或者
http://www.amazon.in/Tena-Wet-Wipe-Pulls-White/dp/B001O1G242/ref=sr_1_46?s=industrial&ie=UTF8&qid=1446802608&sr=1-46
我只想通过这两件事来检查网址。
如果url有dp目录或者product目录
如果url有查询字符串页面有任意数字
我尝试创建正则表达式模式但失败了。 我希望如果第一件事不存在,正则表达式模式应该与第二件事匹配(反之亦然)。
这是我制作的正则表达式模式:
.*\/(dp|product)\/ | .*page
这是我的 regex101 链接:https://regex101.com/r/zD2gP5/1#python
【问题讨论】:
您能解释一下这三种语言标签吗? javascript还是php还是python? @KevinGuan 哦,对不起,我以为那里的人可能知道正则表达式。我应该删除它们吗? 如果你只想检查,为什么要匹配整个输入?只需检查\/(?:dp|product)\/|[&?]page=
。
但是他们的正则表达式之间有一点的区别,你用的是php正则表达式吗?
@KevinGuan 实际上我使用的是 python,但我认为正则表达式对于不同的语言来说是一样的。我的错……
【参考方案1】:
既然你只是想检查一个字符串是否包含某种模式,你可以使用
\/(?:dp|product)\/|[&?]page=
见regex demo
在 Python 中,只需检查 re.search
:
import re
p = re.compile(r'/(?:dp|product)/|[&?]page=')
test_str = "http://w...content-available-to-author-only...n.in/s/lp_6563520031_pg_2?rh=n%3A5866078031%2Cn%3A%215866079031%2Cn%3A6563520031&page=2s&ie=UTF8&qid=14468025716"
if p.search(test_str):
print ("Found!")
另外,在 Python 正则表达式模式中,不需要转义 /
斜杠。
正则表达式匹配两个备选子模式(\/(?:dp|product)\/
和 [&?]page=
):
/
- 正斜杠
(?:dp|product)
- dp
或 product
(不将捕获存储在捕获缓冲区中,因为它是一个非-捕获组)
/
- 斜线
|
- 或者...
[&?]
- &
或 ?
(我们检查查询字符串参数的开头)
page=
- 符号的文字序列page=
。
【讨论】:
【参考方案2】:\/(dp|product)\/|page=(?=[^&]*\d)[^&]+
这是我的想法,请测试一下,如果您有任何疑问,请告诉我。
【讨论】:
尝试运行这个 regex101.com 。您之前的查询 /(dp|product)/|page=(?=[^&]*\d)[^&]+。你只是忘记逃避斜线。不过谢谢以上是关于如何在正则表达式中应用条件的主要内容,如果未能解决你的问题,请参考以下文章
Qt正则表达式 如何得到字符串中所有满足条件的字符。这个正则为啥匹配不成功