代码之家  ›  专栏  ›  技术社区  ›  Chlodwig Radulf

Regex…尽可能少

  •  1
  • Chlodwig Radulf  · 技术社区  · 8 年前

    我有一段人名和历史生日的文字:

    任务是只正则化那些生日早于1900岁的人。 在本例中,regex应标记:

    . ° (1918); . °·°: °°, ° °, °° ·°, ¤ °°, °°, °°, °, °° °°, °° °° (1918). . °° ° °° (1918); . ° ° (1931); . ° ° (1937).

    我尝试了这个正则表达式:

    (?<=\)\.)(.)+?\((19|20)\d{2}\)\.
    

    例如:

    ± . ° ° (1659). ± ± -, ° ° (. ¤) °. . ° , (1495). °. , °,°°°°(I)。°,.°(V)(·.)。° (1918); . °·°: °°, ° °, °° ·°, ¤ °°, °°, °°, °, °° °°, °° °° (1918). . °° (1894). . °° ° °° (1918); . ° ° (1931); . ° ° (1937).

    部件类似。。。

    . °° (1894).

    正确匹配它的表达式是什么?

    例如:它应该匹配

    ). 有些事情 (19\d\d)。

    2 回复  |  直到 8 年前
        1
  •  0
  •   Alan Moore Chris Ballance    8 年前

    这似乎有效:

    (?<=\)[.;])\s*([^()]+\((?:19|20)\d\d\))
    

    DEMO

    非贪婪量词只影响匹配的结束位置,而不影响匹配的开始位置。你需要找到一些可以排除的东西,以防止它过早开始。在这种情况下,不包括括号( [^()]+

    Bill S. Preston (Esq.) (1970)
    

    …将使任务更加困难。

        2
  •  0
  •   Jan    8 年前

    不幸的是,不是一个说俄语的人,但这一次你开始了吗?

    [\p{L},\h]+
    \(1[0-8]\d{2}\)
    

    看见 a demo on regex101.com 要扩展名称部分,请在类中包含其他字符(例如。 . )


    正如其他人所提到的,抓取所有日期并在之后以编程方式分析它们可能更容易。