正则表达式捕获组1

时间:2017-07-03 09:22:36

标签: regex

我在regex很可怕,所以请原谅这个问题的基本原理。我目前有以下regex,它将在字符串末尾标识英国邮政编码:

([a-zA-Z]{1,2}([0-9]{1,2}|[0-9][a-zA-Z])\s*[0-9][a-zA-Z]{2}$)

这很好用。但是我现在正试图做相反的事情,因为我想要一个regex来识别字符串中的所有其他东西,但不是它后面的邮政编码。我已经修改了正则表达式:

((.+)[a-zA-Z]{1,2}([0-9]{1,2}|[0-9][a-zA-Z])\s*[0-9][a-zA-Z]{2}$)

这成功地将其分解为捕获组,将字符串减去邮政编码(使用正则表达式测试器)识别为捕获组1.但是,我不知道如何让它仅选择捕获组1?

1 个答案:

答案 0 :(得分:0)

您可以使用正向前瞻(?=)来选择不带邮政编码的字符串 应用于regex这将导致以下结果:

((.+)(?=[a-zA-Z]{1,2}([0-9]{1,2}|[0-9][a-zA-Z])\s*[0-9][a-zA-Z]{2}$))

正向前瞻会找到一个表达式,其中包含另一个表达式,因此A(?=B)将找到表达式A,其后跟表达式B

more about lookarounds on stackoverflow