我刚刚开始学习正则表达式,所以我还不确定这个问题的几个方面。
现在,我的网页读入URL将其分解为多个部分,仅使用某些部分进行处理: 例如。 1)http://mycontoso.com/products/luggage/selloBag 例如。 2)http://mycontoso.com/products/luggage/selloBag.sf404.aspx
出于某种原因,Sitefinity给了我们两种可能性,这很好,但我需要的只是实际的产品细节,如“行李箱/ selloBag”
我当前的正则表达式是:"(.*)(map-search)(\/)(.*)(\.sf404\.aspx)"
,我将它与替换语句结合起来并提取组4(或$ 4)的内容,这很好,但它不适用于示例2。
所以问题是:是否有可能将2种可能性与正则表达式匹配,其中字符串的一部分可能存在或可能不存在,然后仍然引用您实际想要使用其值的组?
答案 0 :(得分:4)
RFC-3986是关于URI的权限。 Appendix B提供了这个正则表达式,将其分解为其组件:
re_3986 = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
# Where:
# scheme = $2
# authority = $4
# path = $5
# query = $7
# fragment = $9
这是一个使用命名捕获组的增强(和注释)正则表达式(在Python语法中):
re_3986_enhanced = re.compile(r"""
# Parse and capture RFC-3986 Generic URI components.
^ # anchor to beginning of string
(?: (?P<scheme> [^:/?#\s]+): )? # capture optional scheme
(?://(?P<authority> [^/?#\s]*) )? # capture optional authority
(?P<path> [^?#\s]*) # capture required path
(?:\?(?P<query> [^#\s]*) )? # capture optional query
(?:\#(?P<fragment> [^\s]*) )? # capture optional fragment
$ # anchor to end of string
""", re.MULTILINE | re.VERBOSE)
有关根据RFC-3986挑选和验证URI的更多信息,您可能需要查看我一直在处理的文章:Regular Expression URI Validation
答案 1 :(得分:0)
取决于你的正则表达式实现,但大多数支持像
这样的语法(\.sf404\.aspx|)
假设你的组4(即零索引组)。 |
列出了两个备选方案,其中一个是空字符串。
答案 2 :(得分:0)