我想在特定字符串之前和之后进行匹配。
我有字符串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]+)"));
答案 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].Value
和m.Groups[3].Value
是Regex.Match中的组,它们被替换了。您可以看到它运行here.
答案 1 :(得分:0)
有几种方法可以这样做。您可以简单地使用捕获组来执行此操作,例如this expression:
(.*)(\")([\"\w\s0-9]+)(\")(.*)
对于特殊输入,您可以使用this expression:
([0-9]+)( )([A-z\s0-9]+)
您可以根据语言特定要求使用 \ 来转义任何元字符。如果需要,可以添加或减少边界。
此图显示了它的工作方式:
您可以简单地使用字符串替换并将输入字符串替换为'$ 1 $ 3'。
答案 2 :(得分:0)
模式.+?(?= )
只匹配 
前面的内容的原因是因为(?=
是一个肯定的超前断言,不占用任何字符。
如果您要匹配 
之前的所有对象,而您想要使用其余两个,则可以使用2个捕获组而不是3个,因为您不需要 
本身的匹配。
在替换中,使用两组$1$2
(.+?) (.+)
这将匹配
(.+?)
捕获组1,匹配1个以上的字符,除了换行符非贪心 
匹配 
(.+)
捕获组2,匹配1个以上的字符(换行符除外)如果只想匹配数字([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-z
和A-Z