2012-05-22 3 views
0

각 숫자가 공백으로 구분되는 여러 개의 숫자가 포함 된 문자열을 이중 배열로 변환하려고합니다. 같은Regex + 공백으로 구분 된 행을 배열로 변환

예를 들어, 원래 문자열 보인다 : 나는 Regex.Split (originalString, "\ s에 *"@)를 사용하고

originalString = "50 12.2 30 48.1" 

하지만 보이는 배열을 반환처럼 :

[50 
"" 
12 
"." 
2 
"" 
...]

도움을 주시면 감사하겠습니다. string[] myArray = originalString.Split(' ');에 대해 내가 여기 정규식에 대한 필요성이 표시되지 않는 어떤

+0

내가 ... – keynesiancross

+2

사람들이 내가 그렇게 희망을 적어도 정답을 :) 것에 대해보다 올바른 답을 얻을 수있는 사람에 대해 덜 걱정하는 것입니다 답변으로 아래 사람들의 세 가지를 모두 표시 할 수 있다면. –

+0

@Icfseth +1. 작동하는 한. – Crisfole

답변

1
Regex.Split(originalString, @"\s+").Where(s => !string.IsNullOrWhiteSpace(s)) 

Where 여과 널/공백와 IEnumerable를 반환한다. 그래도 배열로 사용하려면 해당 호출 체인에 .ToArray()을 추가하면됩니다.

MINIMUM이 정확하게 일치해야하기 때문에 문자가 필요합니다 (이 문자는 +입니다). 정규식 매번 :) 서두를이 대신

originalString.Split(new char[]{'\t', '\n', ' ', '\r'}, StringSplitOptions.RemoveEmptyEntries); 

필요를 사용하지

+0

이것을 시도하면 두 개의 "ie 24.5"가 각각의 개별 문자 (예 : 2,4,., 5)로 나뉩니다. – keynesiancross

+0

흠. 두 번째로 linqpad를 사용하여 두 번째로 어슬렁 어슬렁 거린다. – Crisfole

+0

당신은'+' – Crisfole

2

..

당신이 정말로 정규식을 사용하려면, 패턴 \s+ 대신 \s*를 사용합니다. *은 0 이상을 의미하지만 하나 이상의 공백 문자로 분할하려고합니다. 정규식과

작업 예 :

 string originalString = "50 12.2 30 48.1"; 
     string[] arr = Regex.Split(originalString, @"\s+"); 

     foreach (string s in arr) 
      Console.WriteLine(s); 
+0

그는 '공백'으로 분리되어 새로운 줄, 탭 또는 다른 방식으로는 작동하지 않는다고 말했습니다. 그는 올바른 정규 표현식을 가지고 있으며, 쓸데없는 것들을 걸러 내기 만하면됩니다. – Crisfole

+0

나는 이것을 시도했지만, 불행히도 공백 문자의 수는 하나가 고정되어 있지 않다. 그래서 나는 정말 이상한 배열로 끝날 것이다 ... – keynesiancross

+0

공간의 수가 가변적이라면, 문자열의 오버로드를 시도해야한다. .Split [with StringSplitOptions] (http://msdn.microsoft.com/en-us/library/ms131448.aspx). 정규 표현식에 대한 필요가 없습니다. – Vlad

3

1

나는 당신이 기대하는 모든 공백 문자를 공급 String.Split 스틱 것입니다.

정규 표현식에서 \s[ \t\r\n] (플러스 표시 문자와 다른 일부 문자)과 같습니다. 우리는 char[]을 통해 다음을 나타낼 수

string[] nums = originalString.Split(
    new char[] { ' ', '\t', '\r', '\n' }, 
    StringSplitOptions.RemoveEmptyEntries); 
1

기본 동작은 공백에 분할하는 것입니다 String.Split에 구분 기호로 null을 전달하는 경우. 여기에는 유니 코드 IsWhiteSpace 테스트와 일치하는 항목이 포함됩니다. ASCII 범위 내에서 탭, 줄 바꿈, 세로 탭, 양식 공급, 캐리지 리턴 및 공백을 의미합니다.

또한 RemoveEmptyEntries 옵션을 전달하여 빈 입력란을 피할 수 있습니다.

originalString = "50 12.2 30 48.1"; 
string[] fields = originalString.Split(null as char[], StringSplitOptions.RemoveEmptyEntries); 
관련 문제