2011-09-22 1 views
0

에 숫자와 점으로 접두사 연속리스트 요소를 검색하려면 :일반 텍스트 텍스트는 다음과 같습니다

"Beginning. 1. The container is 1.5 meters long 2. It can hold up to 2lt of fluid. 3. It 4 holes." 

각 목록 요소의 끝에 마침표가되지 않을 수 있습니다.

어떻게이 텍스트를 아래와 같이 목록으로 나눌 수 있습니까?

"Beginning." 
"The container is 1.5 meters long" 
"It can hold up to 2lt of fluid." 
"It has 4 holes." 

즉, (\ d +) \와 (과) 일치해야합니다. 모든 (\ d +)는 연속 된 정수 들이므로 그 둘 사이에서 텍스트를 분할하고 다듬을 수 있습니다. 정규식으로 가능합니까? 컴퓨터 과학의 영역으로 얼마나 멀리 나가야합니까?

+1

컨테이너 길이가 2.5 미터라면 어떻게 될까요? – Howard

+0

+1 하워드, 내가 그 질문에 따라 매우 불행 할 것입니다. – nurettin

답변

1

분할 정규식, 난 등의 사용

\d+\.(?!\d) 

. 이자형. PHP

$result = preg_split('/\d+\.(?!\d)/', $subject); 

에서 부정적 예측 (?!\d) 도트가 매칭 된 이후에는 다음 자리없는 것을 보장한다.

또는 공간 의무화 - 그 옵션의 경우 :

$result = preg_split('/\s+\d+\.\s+/', $subject); 
+0

좋은 점, 부동 소수점과 일치하지 않지만 순서가 지정된 목록 접두사 만. 이것은 가장 완벽한 대답입니다. – nurettin

1

이 작동하고 C# 코드 :

string s = "Beginning. 1. The container is 1.5 meters long 2. It can hold up to 2lt of fluid. 3. It has 4 holes."; 
string[] res = Regex.Split(s, @"\s*\d+\.\s+"); 

foreach (var r in res) 
{ 
    Console.WriteLine(r); 
} 

Console.ReadLine(); 

내가 \s*\d+\.\s+에 분할 옵션 공백을 의미 하나 이상의 다음 자릿수, 점 (dot), 적어도 하나의 공백 (white space).