【问题标题】:Regex to get all data before second last special character正则表达式获取倒数第二个特殊字符之前的所有数据
【发布时间】:2018-09-24 07:16:11
【问题描述】:

我找不到与此类似的任何先前提出的问题。我需要一个正则表达式来获取倒数第二个特殊字符之前的所有数据。

例如:

suite 1, street 1, zip city, country

我只需要suite 1, street 1

我知道如何使用 [^,]*$ 获取最后一个特殊字符之前的数据,但不知道倒数第二个。

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以使用以下正则表达式,第一个捕获组将具有您想要的子字符串:

    (.*)(?:,[^,]*){2}$
    

    演示:https://regex101.com/r/AWpsL3/1

    或者,如果您使用的工具确实支持捕获组,您可以使用以下正则表达式和前瞻:

    .*(?=(?:,[^,]*){2}$)
    

    演示:https://regex101.com/r/AWpsL3/4

    【讨论】:

    • 我已经用不使用捕获组的解决方案更新了我的答案,以防您使用的工具不支持它。如果您告诉我们您使用正则表达式的工具或编程语言会有所帮助。
    【解决方案2】:

    你可以使用前瞻

    .+(?=.*,.*,)
    

    解释

    • .+ 匹配所有内容,直到位置前瞻开始,如果前瞻没有失败
    • 积极向前看(?=.*,.*,) 断言末尾有两个逗号

    check demo

    【讨论】:

      【解决方案3】:

      根据正则表达式的实现,它可能不支持环视(这是上述解决方案所使用的)。解决此问题的方法是对分隔符(在本例中为逗号)执行字符串拆分。然后执行前两个元素的字符串连接。

      mystr = 'suite 1, street 1, zip city, country';
      parts = mystr.split(',');
      return parts[0]+','+parts[1];
      

      【讨论】:

      • 对不起,我需要一个单行正则表达式,我不能使用这个代码。
      【解决方案4】:

      尝试(([ \w]+,?){2})(?=,),不要使用全局标志(第一次匹配后不返回)

      regex

      【讨论】:

      • 匹配所有数据直到第二个逗号,而不是在倒数第二个逗号之前。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2017-06-24
      • 2017-07-16
      • 2012-04-10
      • 2022-11-20
      • 2016-11-17
      • 2023-03-16
      相关资源
      最近更新 更多