无法使用 Java 正则表达式匹配字符串的最后部分 [重复]

Posted

技术标签:

【中文标题】无法使用 Java 正则表达式匹配字符串的最后部分 [重复]【英文标题】:Unable to match final part of String using Java Regex [duplicate] 【发布时间】:2021-02-23 07:41:07 【问题描述】:

我有一个字符串,它是一个网站名称列表,后跟一个分隔符,然后是 url,每个名称/url 对后跟一个空格和一组新行分隔符。不幸的是,新行分隔符并不总是存在,每对之间都有一个空格,但由于站点名称可以有空格,我不能简单地在空格上分割。

我有一个正则表达式,并且(根据 regexPlanet)它匹配除最后一对之外的所有内容。

是否也可以得到最后一对?

正则表达式:(.+?(?=\|)).(.+?(?= ))

示例字符串:Website 1|https://site1.example.com \r\nWeb Site 2|https://2.example.co.uk \r\nSite 3|https://w3.example.com.au site 4|https://s4.example.org \r\nWeb Site5|https://s5.other.example.ac.uk/

RegexPlanet 报告该正则表达式将匹配前四个站点,而不是第五个站点。

欢迎任何想法

【问题讨论】:

你可以试试([^|]+)\|(.+?(?=\s|\z)) 【参考方案1】:

您可以将此正则表达式与 2 个捕获组一起使用:

([^|]+)\|(.+?(?=\s|\z))

RegEx Demo

正则表达式详细信息:

([^|]+):捕获组 #1 以匹配任何不是 | 的字符的 1+ \|:匹配文字 | (.+?(?=\s|\z)): 捕获组 #2 以匹配后跟空格或行尾的任何字符的 1+

【讨论】:

因为这两个答案都会回答我的问题,所以这个改进了我的正则表达式并解释了正则表达式。谢谢。【参考方案2】:

刚刚将|$ 添加到正则表达式的末尾

(.+?(?=\|)).(.+?(?= |$))

【讨论】:

以上是关于无法使用 Java 正则表达式匹配字符串的最后部分 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式仅匹配匹配组 1 中日期的最后一部分 [重复]

正则表达式怎么匹配字符串中最后一串数字?

在Java中的正则表达式匹配后删除部分字符串

在字符串中匹配两个正则表达式

用于匹配 JSON 子字符串某些部分的 Java 正则表达式

正则匹配文件后缀的问题