Regex 正则表达式获取最后一个特殊字符之前的所有数据

Regex 正则表达式获取最后一个特殊字符之前的所有数据,regex,Regex,我以前找不到任何类似的问题。我需要一个正则表达式来获取最后一个特殊字符之前的所有数据 例如: suite 1, street 1, zip city, country 我只需要1号街1号套房 我知道如何使用[^,]*$获取最后一个特殊字符之前的数据,但不知道如何获取最后一个特殊字符。您可以使用以下正则表达式,第一个捕获组将具有所需的子字符串: (.*)(?:,[^,]*){2}$ 演示: 或者,如果您使用的工具不支持捕获组,则可以使用以下带有lookahead的正则表达式: .*(?=(?:

我以前找不到任何类似的问题。我需要一个正则表达式来获取最后一个特殊字符之前的所有数据

例如:

suite 1, street 1, zip city, country
我只需要
1号街1号套房


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

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

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

或者,如果您使用的工具不支持捕获组,则可以使用以下带有lookahead的正则表达式:

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

演示:

根据regex的实现,它可能不支持lookaround(这是上面的解决方案所使用的)。解决方法是对分隔符(在本例中为逗号)执行字符串拆分。然后执行前两个元素的字符串联接

mystr = 'suite 1, street 1, zip city, country';
parts = mystr.split(',');
return parts[0]+','+parts[1];
请尝试
([\w]+,?){2})(?=,)
并不要使用全局标志(第一次匹配后不返回)

您可以使用“向前看”

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

  • +
    匹配所有内容,直到位置查找头开始,前提是前瞻没有失败
  • 正向前瞻
    (?=*,*)
    断言末尾存在两个逗号

抱歉,我需要一个单行正则表达式,我无法使用此代码。我已使用不使用捕获组的解决方案更新了我的答案,以防您使用的工具不支持它。如果您告诉我们您使用的是哪个工具或编程语言,这会有所帮助。它将所有数据匹配到第二个逗号,而不是最后一个逗号。