使用C#中的正则表达式获取最后一个逗号或最后一个数字后面的字符串

3
如何使用正则表达式获取最后一个逗号或数字后面的字符串?针对以下示例:
  • "Flat 1, Asker Horse Sports",-- 获取逗号后面的字符串,结果为:"Asker Horse Sports"
  • "9 Walkers Barn" -- 获取数字后面的字符串,结果为:"Walkers Barn"
我需要这个正则表达式支持这两种情况,或者为每种情况提供不同的正则表达式。
我尝试了 /,[^,]*$/(.*),[^,]*$ 来获取最后一个逗号后面的字符串,但没有成功。
2个回答

3

您可以使用

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

查看正则表达式演示以及.NET正则表达式演示

细节

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

在C#中,您还可以使用RegexOptions.RightToLeft选项告诉正则表达式引擎从字符串的末尾开始搜索匹配(以使正则表达式匹配更有效率。尽管如果输入字符串很短,则可能不需要此选项):

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

为什么第一部分有空格? - Rand Random
好的,我认为我明白了,基本上是要使用.TrimStart()来处理结果。 - Rand Random
@RandRandom 嗯,Regex.Match(text, @"[^,\d]+$", RegexOptions.RightToLeft)?.Value.Trim() 也可以。 - Wiktor Stribiżew

1
你在 (.*),[^,]*$ 中正确地捕获了组,但是该组应该是你要查找的部分。
如果必须存在逗号或数字,则可以匹配到它们的最后一个出现,并捕获其后面的内容。
^.*[\d,]\s*(.+)$
  • ^ 字符串开始
  • .* 匹配除换行符外的任何字符0次或多次
  • [\d,] 匹配逗号或数字
  • \s* 匹配0个或多个空白字符
  • (.+) 捕获第1组,匹配除换行符外的任何字符至少1次
  • $ 字符串结束

.NET正则表达式演示 | C#演示

enter image description here


不知道你可以有多个匹配组。很好的例子。谢谢。 - Alin Golumbeanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接