2013-11-22 2 views
0

가능하면 텍스트에서 인용 된 모든 문자열과 일치하는 정규 표현식을 사용하려고합니다. 예 :모든 인용 문자열을 정규 표현식으로 일치 시키십시오.

ABC released its full midseason schedule today, and it features premiere dates for several new shows, along with one rather surprising timeslot change.</p><p>First of all, ABC's previously reported plans for dramas 'Once Upon A Time,' 'Revenge,' 'Grey's Anatomy,' and 'Scandal' haven't changed. 

나는 결과로하고 싶은 :

's previously reported plans for dramas ' (not useful but i can manage it) 
'Once Upon A Time,' 
' ' 
'Revenge,' 
' 'Grey' 
'Grey's Anatomy,' 
etc 

그래서 내가 basicly 두 번 각각의 견적을 일치해야합니다. 표준 정규 표현식을 사용하면 'Once Upon A Time'과 'Grey 's Anatomy'는 명확한 이유가 없습니다.

의견을 보내 주셔서 감사합니다.

+6

그것은 전혀 명확하지 않다. 무엇을 시도하고 어떤 언어를 사용하고 있습니까? 정규식을 작성하려면 특정 문자 세트를 일치시키는 방법에 대한 논리를 정의해야합니다. 당신이 제공 한 출력 세트에서 2 개의 작은 따옴표가있는 문자열과 3의 다른 문자열이 있습니다. 정규식은 사람처럼 보이며 '회색의 해부학'이 2 개가 아닌 하나의 문자열이어야한다고 생각합니까? 이것은 작은 시작일 수 있습니다 [' '(?! s). * ?,''] (http://regex101.com/r/gX9cO8). 다른 접근법으로 문제를보고 두 번째'

'을 붙잡고','로 나눌 수 있습니다. – HamZa

+0

글쎄, 미안 해요, 분명히 두 개의 따옴표 사이에 일치하는 표준 regexp 의미합니다. 언어는 PHP/PCRE입니다.

으로 나눌 수 없으므로 다른 텍스트에는 p가 없습니다. – aciobanu

+0

더 명확하게하려면, 'text 1'text 2 ','text 3 '과 같은 입력 문자열이 주어진다면 최소한 (나는 쓸데없는 일치를 신경 쓰지 않아도됩니다.) 텍스트 1을 제공하는 regexp를 원합니다. 텍스트 2, 텍스트 3. 고마워요. – aciobanu

답변

2

여기에 주어진 예제로 작동하는 Perl의 해결책이 있습니다. live demo을 참조하십시오.

#!/usr/bin/perl -w 

use strict; 
use warnings; 

while (<DATA>) { 

# \1/ Starting at the beginning of a string or non-word character, 
# \2/ MATCH a single-quote character followed by a character that is 
#  *not* a single quote character, 
# \3/ And continue matching one or more times: 
#  - a white space character, 
#  - a word character, 
#  - a comma, 
#  - or a single-quote that is followed by a lower-case 's' or 't'. 
# \4/ And END the match on a single quote. 
# \5/ Continue searching for additional matches. 

    my @matches = /(?:\A|\W)('[^'](?:\w|\s|,|'(?=[st]\b))+')/g; 

#     \___1___/\__2_/\___________3__________/4/\5/ 

    print join("\n", @matches), "\n"; 
} 

__END__ 
'At the Beginning' ABC released its full midseason schedule today, and it features premiere dates for several new shows, along with one rather surprising timeslot change.</p><p>First of all, ABC's previously reported plans for dramas 'Once Upon A Time,' 'Revenge,' 'Grey's Anatomy,' and 'Scandal' haven't changed. 

예상 출력 :

'At the Beginning' 
'Once Upon A Time,' 
'Revenge,' 
'Grey's Anatomy,' 
'Scandal' 
+0

감사합니다! 당신은 regexp 완벽하게 작동합니다. 나는 그것을 배울 수 있도록 그것을 분석 할 것이다. – aciobanu

+0

@aciobanu - 내 솔루션이 당신의 필요를 충족 시켰다는 소식을 듣고 기쁘게 생각합니다. 내 솔루션이 귀하의 질문에 정확하게 부합하지는 않지만 특정 상황에서 따옴표가 붙은 표현식을 찾아내는 식으로 귀하가 원하는 것을 이해하고 있다고 생각했습니다. 까다로운 부분은 내부 따옴표와 외부 따옴표를 구별하는 것입니다. 귀하의 질문은 제게 약간의 학습을 할 기회를주었습니다. :-) – DavidRR

관련 문제