匹配最后一个冒号前的所有内容

时间:2014-01-30 16:20:12

标签: regex

我有一个类似于 -

的项目列表
AFCNA Gifts:Bags:Duffel Bag
ALPACA CASH
Cash
2000  Discount Farm Day Ad
Estate Items:1 lb Cones of Yarn
AFCNA MFG:Yarn:AFCNA (New) Sock Yarn -Wigwam
WIP CONE YARN:115 White Suri Shawl Yarn
Estate Items:12 lb Alpaca Yarn Hth DkBr
WIP CONE YARN:New Shawl Yarn

我需要在最后一个冒号之后只抓取项目名称。最后一次冒号前的所有内容都是不必要的元信息。我还需要它不匹配任何不包含冒号的字符串。

到目前为止,我有^[^:]+\:,但这是抓住了ALPACA CASH以及Cash这些不需要找到的行。

我怎样才能在最后一个冒号前抓取所有内容,但只有当该行包含一个冒号时?

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

[^:]*$

在最后一次冒号后抓取文字。

如果您只想从存在:的行中抓取,请使用:

:([^:]*)$

你的文字将在被捕获的组#1中。

答案 1 :(得分:0)

你可以试试正则表达式:

:([^:\r\n]+)$

并确保您启用了多行选项,以便$匹配行的每一行,而不仅仅是整个字符串的结尾。

:将匹配任意行中的最后一个:[^:\r\n]+确保它是最后一行)

[^:\r\n]+匹配所有不是:\r\n的字符,以便您永远不会匹配多行。

([^:\r\n]+)将成为您的第一个捕获组,并包含您要查找的文字。

$匹配该行的结尾。

regex101 demo

如果您使用支持lookbehinds的正则表达式引擎,您也可以尝试:

(?<=:)[^:\r\n]+$

不需要捕获。 (?<= ... )是一个积极的观察,并确保在匹配的组之前有一个:

regex101 demo