您好我试图从我的正则表达式获得以下结果。我需要最后一次出现"_"
和句点之间的字符。我已经得到了这个正则表达式[^_]+$
,但它最终没有摆脱".pdf"
。
期望的输出
原始字符串:SalesOrder_359959_929058.pdf 正则表达式:929058
答案 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)
答案 5 :(得分:0)
你要的是“在字符串结尾之前所有不是_的东西”。类似于以下内容:_([^_.]+)\..*$
这将导致group(1)包含last _和a。之间的所有内容,但它需要有一个。和_。
如果您需要允许字符串丢失。或_,您可以使用_?([^_.]+)(\..*)?$