最后一次出现的字符和另一个字符之间的正则表达式匹配

时间:2014-02-27 22:56:51

标签: regex

您好我试图从我的正则表达式获得以下结果。我需要最后一次出现"_"和句点之间的字符。我已经得到了这个正则表达式[^_]+$,但它最终没有摆脱".pdf"

期望的输出

原始字符串:SalesOrder_359959_929058.pdf 正则表达式:929058

6 个答案:

答案 0 :(得分:2)

试试这个:

([^_.]+)\.

这将匹配组1中除_.以外的任何字符中的一个或多个字符,后跟.。然后,您只需要提取组1以获取所需的子字符串。

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

[^_.]+(?=\.)

这将匹配除_.以外的任何字符中的一个或多个字符,只要它后面紧跟.,但.本身不是捕获。

当然,如果您的字符串中有多个.,则这两种方法都可能失败。在这种情况下,你可能会使用这样的东西:

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

或者这个:

[^_.]+(?=\.[^_.]*$)

答案 1 :(得分:1)

这只是另一种观点!

我认为如果格式始终相同:

letters_numbers_numbers.extension

你可以做点什么

string[] splits = text.Replace(".", "_").Split('_');
return splits[splits.Length - 2];

输出:

929058

答案 2 :(得分:0)

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

[^_.]+(?=[^_]*$

答案 3 :(得分:0)

这样的事情?

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

答案 4 :(得分:0)

如果您的正则表达式引擎支持前瞻,您可以使用:

[^_]+(?=\.)

工作正则表达式示例:

http://regex101.com/r/rZ9qQ6

答案 5 :(得分:0)

你要的是“在字符串结尾之前所有不是_的东西”。类似于以下内容:_([^_.]+)\..*$这将导致group(1)包含last _和a。之间的所有内容,但它需要有一个。和_。

如果您需要允许字符串丢失。或_,您可以使用_?([^_.]+)(\..*)?$