栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在后面的视图中进行有限重复在某些方面不能起作用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在后面的视图中进行有限重复在某些方面不能起作用?

落后支持

正则表达式的主要口味对后视的支持不同。有些施加了一定的限制,有些甚至根本不支持它。

  • Javascript:不支持
  • Python:仅固定长度
  • Java:仅有限长度
  • .NET:无限制

参考文献

  • Regular-expressions.info/比较

蟒蛇

在仅支持固定长度的向后查找的Python中,您的原始模式会引发错误,因为

d{1,2}
显然没有固定长度。您可以通过交替使用两个不同的固定长度的lookbehind来“修复”此问题,例如:

(?<=^d/)d{1,2}|(?<=^dd/)d{1,2}

或者,您也可以将两个后置项作为一个非捕获组的备用项:

(?:(?<=^d/)|(?<=^dd/))d{1,2}

(请注意,

d
无需括号即可使用)。

也就是说,使用捕获组可能要简单得多:

^d{1,2}/(d{1,2})

请注意,

findall
如果只有一个组,则返回第1组捕获的内容。捕获组比后面的支持更广泛,并且通常导致更易读的模式(例如在这种情况下)。

此片段说明了以上所有要点:

p = re.compile(r'(?:(?<=^d/)|(?<=^dd/))d{1,2}')print(p.findall("12/34/56"))   # "[34]"print(p.findall("1/23/45"))    # "[23]"p = re.compile(r'^d{1,2}/(d{1,2})')print(p.findall("12/34/56"))   # "[34]"print(p.findall("1/23/45"))    # "[23]"p = re.compile(r'(?<=^d{1,2}/)d{1,2}')# raise error("look-behind requires fixed-width pattern")

参考文献

  • Regular-expressions.info/环顾四周,字符类,交替,捕获组

爪哇

Java仅支持有限长度的后向查找,因此您可以

d{1,2}
像在原始模式中那样使用。以下代码段演示了这一点:

    String text =        "12/34/56 daten" +        "1/23/45 another daten";    Pattern p = Pattern.compile("(?m)(?<=^\d{1,2}/)\d{1,2}");    Matcher m = p.matcher(text);    while (m.find()) {        System.out.println(m.group());    } // "34", "23"

请注意,它

(?m)
是嵌入式的,
Pattern.MULTILINE
因此
^
与每行的开头匹配。还要注意,由于
是字符串文字的转义字符,因此必须编写
"\"
以在Java中获得一个反斜杠。


尖锐的

C#在lookbehind上支持完整的正则表达式。以下代码段显示了如何在后视中使用

+
重复:

var text = @"1/23/4512/34/56123/45/671234/56/78";Regex r = new Regex(@"(?m)(?<=^d+/)d{1,2}");foreach (Match m in r.Matches(text)) {  Console.WriteLine(m);} // "23", "34", "45", "56"

请注意,与Java不同,在C#中,您可以使用@引号引起来的字符串,这样就不必转义

为了完整起见,这是在C#中使用捕获组选项的方式:

Regex r = new Regex(@"(?m)^d+/(d{1,2})");foreach (Match m in r.Matches(text)) {  Console.WriteLine("Matched [" + m + "]; month = " + m.Groups[1]);}

给定上一个

text
,将输出:

Matched [1/23]; month = 23Matched [12/34]; month = 34Matched [123/45]; month = 45Matched [1234/56]; month = 56


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号