正则表达式,用于匹配两个数字之间的特殊字符

时间:2019-05-05 00:37:14

标签: c# regex

我想在特定字符串之前和之后进行匹配。 我有字符串10 990 Points 但只想匹配 

之前和之后的所有内容

我已经尝试过.+?(?= ),但这只会占用 之前的所有内容。

我希望10 990 Points的输出为“ 10990点”

Console.WriteLine("Pris: " +
    Regex.Match(
        ProductListItem.Descendants("span")
        .Where(node => node.GetAttributeValue("class", "")
        .Equals("item-card-details-price-amount")).FirstOrDefault().InnerText
, @"([0-9]+)( )([A-z\s0-9]+)"));

3 个答案:

答案 0 :(得分:1)

解决了。使用

([0-9]+)( )([A-z\s0-9]+)

在c#中,我使用

Regex.Replace(string, @"([0-9]+)( )([A-z\s0-9]+)", m => m.Groups[1].Value + m.Groups[3].Value)

m.Groups[1].Valuem.Groups[3].Value是Regex.Match中的组,它们被替换了。您可以看到它运行here.

答案 1 :(得分:0)

有几种方法可以这样做。您可以简单地使用捕获组来执行此操作,例如this expression

(.*)(\")([\"\w\s0-9]+)(\")(.*)

enter image description here


编辑:

对于特殊输入,您可以使用this expression

([0-9]+)( )([A-z\s0-9]+)

您可以根据语言特定要求使用 \ 来转义任何元字符。如果需要,可以添加或减少边界。

enter image description here

此图显示了它的工作方式:

enter image description here

替换

您可以简单地使用字符串替换并将输入字符串替换为'$ 1 $ 3'。

答案 2 :(得分:0)

模式.+?(?= )只匹配 前面的内容的原因是因为(?=是一个肯定的超前断言,不占用任何字符。

如果您要匹配 之前的所有对象,而您想要使用其余两个,则可以使用2个捕获组而不是3个,因为您不需要 本身的匹配。

在替换中,使用两组$1$2

(.+?) (.+)

这将匹配

  • (.+?)捕获组1,匹配1个以上的字符,除了换行符非贪心
  •  匹配 
  • (.+)捕获组2,匹配1个以上的字符(换行符除外)

查看.NET regex demo

如果只想匹配数字([0-9]+),则代码可能如下所示:

Regex.Replace("10 990 Points", @"([0-9]+) (.*)", m => m.Groups[1].Value + m.Groups[2].Value)

注意

在此字符类[A-z\s0-9]+中,此部分A-z matches more比范围a-zA-Z

相关问题