正则表达式查找字符串中最后出现的模式

时间:2017-01-26 09:14:58

标签: regex regex-greedy

我的字符串格式为:

"as.asd.sd fdsfs. dfsd  d.sdfsd. sdfsdf sd   .COM"

我只想匹配最后一个句点(。)

之前的最后一段空格

到目前为止,我能够使用以下方法捕获空格,但不能捕获 very 最后一次出现:

\s+(?=\.\w)

我怎样才能减少贪心?

3 个答案:

答案 0 :(得分:4)

你可以尝试这样:

(\s+)(?=\.[^.]+$)

(?=\.[^.]+$)正向前看一个点和除了行尾的点之外的字符。

演示:

https://regex101.com/r/k9VwC6/3

答案 1 :(得分:0)

你可以试试这个。它将捕获最后一个空白区段 - 在第一个捕获组中。

(\s+)\.[^\.]*$

答案 2 :(得分:0)

"as.asd.sd ffindMyLastOccurrencedsfs. dfindMyLastOccurrencefsd  d.sdfsd. sdfsdf sd   ..COM"

.*(?=((?<=\S)\s+)).*

replaced by `>\1<`

>   <

作为更概括的示例

"as.asd.sd ffindMyLastOccurrencedsfs. dfindMyLastOccurrencefsd  d.sdfsd. sdfsdf sd   ..COM"

.*(?=(findMyLastOccurrence|(?<=\S)\s+|(?<=[^\.])\.+)).*

replaced by `>\1<`

>..<

说明:

第1部分 .*

  • 是贪婪的,只要找到针头,它就会找到所有东西。因此,它也可以捕获所有出现的针直到最后一个针。

编辑添加:

  • 如果我们对第一击感兴趣,可以通过写.*?
  • 来避免贪婪。

第2部分 (?=(findMyLastOccurrence|(?<=\S)\s+|(?<=[^\.])\.+|(?<=**Not**NeedlePart)NeedlePart+))

  • 为贪婪的“查找全部”定义“中断”条件。它由几个部分组成:
    (?=(needles))
    • 正向前进:确保先前发现的一切后跟着指针 findMyLastOccurrence|(?<=\S)\s+|(?<=[^\.])\.+)|(?<=**Not**NeedlePart)NeedlePart+
    • 我们正在寻找的几根针。针本身就是图案。
    • 如果我们要寻找空白,点或其他针状部分的集合,那么我们所寻找的模式实际上是:任何 不是 针状部分,然后是一个或多个针头部分(因此针头部分为+)。请参见示例,将空格与\ S(实际点)取反。与[^。]
    • 取反

第3部分 .*

  • 由于我们对其余部分不感兴趣,因此我们将其捕获,不再使用。我们可以用括号将其捕获并将其用作另一个组,但这不在本文范围之内