[英]Pattern matching problem in C#
我有一個像“AAA 101 B202 C 303”這樣的字符串,我想擺脫字符和數字之間的空格,如果有的話。 所以操作后,字符串應該像“AAA101 B202 C303”。 但我不確定正則表達式是否可以做到這一點?
有幫助嗎? 提前致謝。
是的,您可以使用正則表達式執行此操作。 這是一個簡短而完整的例子:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
string text = "A 101 B202 C 303 ";
string output = Regex.Replace(text, @"(\p{L}) (\d)", @"$1$2");
Console.WriteLine(output); // Prints A101 B202 C303
}
}
(如果你要做很多事情,你可能想要為模式編譯一個正則表達式。)
\\p{L}
匹配任何unicode字母 - 您可能希望限制更多。
你可以做點什么
([A-Z]+)\s?(\d+)
並替換為
$1$2
表達式可以收緊,但上面的內容應該適用於您的示例輸入字符串。
它的作用是聲明一個包含字母(第一組parantheses)的組,然后是一個可選空格(\\ s?),然后是一組數字(\\ d +)。 這些組可以通過引用它們的索引來替換它們,所以當你想要擺脫空間時,只需用$ 1 $ 2替換。
雖然不像Regex那樣簡潔,但像這樣的C#代碼相當簡單且運行速度非常快:
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.Length; i++)
{
// exclude spaces preceeded by a letter and succeeded by a number
if(!(s[i] == ' '
&& i-1 >= 0 && IsLetter(s[i-1])
&& i+1 < s.Length && IsNumber(s[i+1])))
{
sb.Append(s[i]);
}
}
return sb.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.