"AAA 101 B202 C 303"과 같은 문자열이 있는데 문자가 있으면 char와 number 사이의 공백을 제거하고 싶습니다. 작동 후 문자열은 "AAA101 B202 C303"과 같아야합니다. 하지만 정규식이 이것을 할 수 있는지 확실하지 않습니다?C#의 패턴 매칭 문제
어떤 도움이 필요합니까? 미리 감사드립니다.
"AAA 101 B202 C 303"과 같은 문자열이 있는데 문자가 있으면 char와 number 사이의 공백을 제거하고 싶습니다. 작동 후 문자열은 "AAA101 B202 C303"과 같아야합니다. 하지만 정규식이 이것을 할 수 있는지 확실하지 않습니다?C#의 패턴 매칭 문제
어떤 도움이 필요합니까? 미리 감사드립니다.
예, 정규 표현식으로이 작업을 수행 할 수 있습니다.
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}
일치하는 모든 유니 코드 문자 : 다음은 짧지 만 완전한 예제 - 더 제한적일 수 있습니다.
당신은
([A-Z]+)\s?(\d+)
처럼 뭔가를 그리고 표현가 강화 될 수
$1$2
로 교체하지만, 위의 예 입력 문자열 작업을해야 할 수 있습니다.
글자 (첫 번째 괄호 세트), 선택적 공백 (\ s?) 및 숫자 그룹 (\ d +)을 포함하는 그룹을 선언하는 것입니다. 그룹을 인덱스로 참조하여 대체 할 수 있으므로 공간을 없애려면 $ 1 $ 2로 바꾸십시오.
동안 간결하지 정규식,이 매우 간단하고 매우 빠르게 실행처럼 무언가에 대한 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();
그냥 재미를 위해 (프로그래밍의 행위이기 때문에/때로는 재미 있어야한다) : O) 나는 Aggregate와 LINQ을 사용하고 있습니다 :
var result = text.Aggregate(
string.Empty,
(acc, c) => char.IsLetter(acc.LastOrDefault()) && Char.IsDigit(c) ?
acc + c.ToString() : acc + (char.IsWhiteSpace(c) && char.IsLetter(acc.LastOrDefault()) ?
string.Empty : c.ToString())).TrimEnd();
왜 공간을 선택하게? 결국, 그것이 바로 이것입니다. –