我有一个类似于 -
的项目列表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
这些不需要找到的行。
我怎样才能在最后一个冒号前抓取所有内容,但只有当该行包含一个冒号时?
答案 0 :(得分:2)
您可以使用此正则表达式:
[^:]*$
在最后一次冒号后抓取文字。
如果您只想从存在:
的行中抓取,请使用:
:([^:]*)$
你的文字将在被捕获的组#1中。
答案 1 :(得分:0)
你可以试试正则表达式:
:([^:\r\n]+)$
并确保您启用了多行选项,以便$
匹配行的每一行,而不仅仅是整个字符串的结尾。
:
将匹配任意行中的最后一个:
([^:\r\n]+
确保它是最后一行)
[^:\r\n]+
匹配所有不是:
或\r
或\n
的字符,以便您永远不会匹配多行。
([^:\r\n]+)
将成为您的第一个捕获组,并包含您要查找的文字。
$
匹配该行的结尾。
如果您使用支持lookbehinds的正则表达式引擎,您也可以尝试:
(?<=:)[^:\r\n]+$
不需要捕获。 (?<= ... )
是一个积极的观察,并确保在匹配的组之前有一个:
。