2012-11-19 83 views
0

我需要幫助來刪除字母,但不是來自傳入數據字符串的單詞。像下面,刪除字符串中的單個字母

String A = "1 2 3A 4 5C 6 ABCD EFGH 7 8D 9"; 

String A = "1 2 3 4 5 6 ABCD EFGH 7 8 9"; 
+0

這是家庭作業? – Steven

+0

你有什麼嘗試?爲了讓人們參與到這裏,你需要表明你正試圖自己解決問題。 – RedEyedMonster

+1

@Steven:這很重要嗎?除了通常的「你有什麼嘗試」? –

回答

4

你需要匹配一個字母,並確保沒有信之前和之後。如此匹配

(?<!\p{L})\p{L}(?!\p{L}) 

並替換爲空字符串。

在C#:

string s = "1 2 3A 4 5C 6 ABCD EFGH 7 8D 9"; 
string result = Regex.Replace(s, @"(?<!\p{L}) # Negative lookbehind assertion to ensure not a letter before 
            \p{L}  # Unicode property, matches a letter in any language 
            (?!\p{L}) # Negative lookahead assertion to ensure not a letter following 
            ", String.Empty, RegexOptions.IgnorePatternWhitespace); 
+1

爲輝煌的和永遠不可讀的正則表達式+1。 – Steven

+1

+1由於即使是相對有經驗的正則表達式用戶,lookaround和posix語法也不是普遍可識別的,所以您可能想要解釋此表達式匹配任何既不在另一個字母之前也不成功的單個字母。 – dasblinkenlight

+0

@Stema:謝謝!這工作像一個魅力。 –

0

的 「強制性」 LINQ的方法:

string[] words = A.Split(); 
string result = string.Join(" ", 
     words.Select(w => w.Any(c => Char.IsDigit(c)) ? 
     new string(w.Where(c => Char.IsDigit(c)).ToArray()) : w)); 

此方法查看每個單詞是否包含數字。然後它過濾掉非數字字符並從結果中創建一個新字符串。否則,它只需要這個詞。

+0

下面是一個演示:http://ideone.com/mjec6c –

0

這裏來的老同學:

Dim A As String = "1 2 3A 4 5C 6 ABCD EFGH 7 8D 9" 
Dim B As String = "1 2 3 4 5 6 ABCD EFGH 7 8 9" 
Dim sb As New StringBuilder 
Dim letterCount As Integer = 0 
For i = 0 To A.Length - 1 
    Dim ch As Char = CStr(A(i)).ToLower 
    If ch >= "a" And ch <= "z" Then 
    letterCount += 1 
    Else 
    If letterCount > 1 Then sb.Append(A.Substring(i - letterCount, letterCount)) 
    letterCount = 0 
    sb.Append(A(i)) 
    End If 
Next 
Debug.WriteLine(B = sb.ToString) 'prints True