C# 从字符串中删除单个字母

C# 从字符串中删除单个字母,c#,regex,C#,Regex,我需要帮助从传入的数据字符串中删除字母而不是单词。如下图所示 String A = "1 2 3A 4 5C 6 ABCD EFGH 7 8D 9"; 到 您需要匹配一个字母,并确保前后没有字母。所以匹配 (?<!\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,@)(?您需要匹配一个字母,并确保前后没有字

我需要帮助从传入的数据字符串中删除字母而不是单词。如下图所示

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


您需要匹配一个字母,并确保前后没有字母。所以匹配

(?<!\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})\p{L}(?!\p{L})
(?
并替换为空字符串

在C#中:

string s=“1 2 3A 4 5C 6 ABCD EFGH 7 8D 9”;
string result=Regex.Replace(s,@)(?强制的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));
这种方法检查每个单词是否包含一个数字。然后它过滤掉非数字字符并从结果中创建一个新字符串。否则它只接受单词。

强制的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));

这种方法检查每个单词是否包含一个数字。然后它过滤掉非数字字符,并从结果中创建一个新字符串。否则它只接受单词。

这就是老派:

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
Dim A As String=“12 3A 4 5C 6 ABCD EFGH 7 8D 9”
尺寸B为字符串=“1 2 3 4 5 6 ABCD EFGH 7 8 9”
使某人成为新的架线工
Dim letterCount为整数=0
对于i=0到A,长度为-1
Dim ch As Char=CStr(A(i)).ToLower
如果ch>=“a”和ch 1,则sb.追加(a.子字符串(i-字母计数,字母计数))
信数=0
某人(A(i))
如果结束
下一个
Debug.WriteLine(B=sb.ToString)'打印为True

老学校来了:

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
Dim A As String=“12 3A 4 5C 6 ABCD EFGH 7 8D 9”
尺寸B为字符串=“1 2 3 4 5 6 ABCD EFGH 7 8 9”
使某人成为新的架线工
Dim letterCount为整数=0
对于i=0到A,长度为-1
Dim ch As Char=CStr(A(i)).ToLower
如果ch>=“a”和ch 1,则sb.追加(a.子字符串(i-字母计数,字母计数))
信数=0
某人(A(i))
如果结束
下一个
Debug.WriteLine(B=sb.ToString)'打印为True


你尝试过什么?要吸引这里的人,你需要表明你正在努力自己解决问题。@Steven:这有关系吗?除了通常的“你尝试过什么”之外?我会使用正则表达式。@RedEyedMonster Hello!!我已经尝试过Regex.Replace,但我必须对存储在单个数组中的每一段数据单独进行替换(这是在拆分字符串并存储到数组中后完成的).你尝试过什么?要吸引这里的人,你需要表明你正在努力自己解决问题。@Steven:这有关系吗?除了通常的“你尝试过什么”之外,我会使用正则表达式。@RedEyedMonster Hello!!我尝试过Regex.Replace,但我必须对存储在单个数组中的每一条数据单独进行替换(这是在拆分字符串并存储到数组中后完成的).+1表示出色且始终不可读的正则表达式。+1由于环顾和posix语法即使是相对有经验的正则表达式用户也无法普遍识别,因此您可能需要解释,此表达式与任何一个字母匹配,而该字母之前或之后都没有另一个字母。@Steven,以表明正则表达式不是未读的。@Steven默认情况下可以添加注释版本。匹配位置不在前缀之后:
(?.Match position不在后缀之前:
find(?!suffix)
@stema,如果字符串的第一项必须有字母,其余的项可以是单词或数字,我该怎么办?+1表示出色且始终无法读取的正则表达式。+1因为环顾和posix语法即使是相对有经验的正则表达式用户也无法普遍识别,您可能想解释一下这个表达式Session匹配任何一个既没有前面也没有后面有另一个字母的字母。@Steven,为了表明正则表达式在默认情况下不是不可读的,我添加了一个注释版本。匹配位置不在前缀之后:
(?。匹配位置不在后缀之前:
find(?!suffix)
@stema,如果字符串的第一项必须有字母,其余项可以是单词或数字,我该怎么办???