在C#中使用Regex在最后一个逗号或最后一个数字之后获取字符串

时间:2020-10-23 14:02:08

标签: c# regex

在此示例中,如何使用正则表达式获取最后一个逗号或最后一个数字之后的字符串:

  • “ Flat 1,Asker Horse Sports”,-在“,”之后获取字符串,结果是:“ Asker 赛马运动”
  • “ 9 Walkers Barn”-在“ 9”结果之后获取字符串: 步行者谷仓

我需要该正则表达式来支持这两种情况或每种情况下的不同正则表达式规则。

我尝试/,[^,]*$/(.*),[^,]*$以获得最后一个逗号之后的字符串,但是没有运气。

2 个答案:

答案 0 :(得分:3)

您可以使用

[^,\d\s][^,\d]*$

请参见regex demo(和.NET regex demo)。

详细信息

  • [^,\d\s]-除逗号,数字和空格外的任何字符
  • [^,\d]*-除逗号和数字外的任何字符
  • $-字符串的结尾。

在C#中,您还可以告诉regex引擎使用RegexOptions.RightToLeft选项从字符串的末尾搜索匹配项(以使regex匹配更有效。尽管在这种情况下,如果输入的字符串很短):

var output = Regex.Match(text, @"[^,\d\s][^,\d]*$", RegexOptions.RightToLeft)?.Value;

答案 1 :(得分:1)

您在(.*),[^,]*$中的捕获组上处于正确的位置,但是捕获组应该是您要寻找的部分。

如果必须使用逗号或数字,则可以匹配直到最后一个出现,然后捕获捕获组中的后续内容。

^.*[\d,]\s*(.+)$
  • ^字符串的开头
  • .*匹配除换行符0次以上以外的所有字符
  • [\d,]匹配,或数字
  • \s*匹配0+个空格字符
  • (.+)捕获 group 1 ,匹配除换行符1次以上之外的所有字符
  • $字符串结尾

.NET regex demo | C# demo

enter image description here