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,如果字符串的第一项必须有字母,其余项可以是单词或数字,我该怎么办???