2017-11-21 6 views
0

특정 단어 뒤에 한 줄짜리 문자열을 캡처하는 정규식 작성에 대한 도움말을 찾으십시오.정규식 기능이 제한적인 프로그램을 사용하여 특정 단어 뒤에 문자열을 가져 오겠습니까?

내가 겪고있는 과제는이 정규식을 작성해야하는 프로그램이 단일 행 형식을 사용한다는 것입니다. 즉, 점이 새로운 행과 일치합니다. 그래서 내가 만든 수식이 작동하지 않습니다. 아래에서 자세한 내용을 참조하십시오. 조언이나 조언이 있으십니까?

보다 구체적인 정규식 작업 :

나는 다음과 같은 항목에서 단어의 세부 사항 다음에 오는 라인을 잡기 위해 노력하고있어. 목표는 100 % 실크 또는 100 % 벨벳을 꺼내는 것입니다. 이것은 항상 세부 사항 뒤에 오는 제품의 재료입니다.

원시 데이터 : 여기

<p>Loose fitted blouse green/yellow lily print. 
V-neck opening with a closure string. 
Small tie string on left side of top.</p> 
<h3>Details</h3> <p>100% Silk.</p> 
<p>Made in Portugal.</p> <h3>Fit</h3> 
<p>Model is 5‰Ûª10,‰Û size 2 wearing size 34.</p> <p>Size 34 measurements</p> 

    OR 

<p>The velvet version of this dress. High waist fit with hook and zipper closure. 
Seams run along edges of pants to create a box-like.</p> 
<h3>Details</h3> <p>100% Velvet.</p> 
<p>Made in the United States.</p> 
<h3>Fit</h3> <p>Model is 5‰Ûª10‰Û, size 2 and wearing size M pants.</p> <p>Size M measurements Length: 37.5"åÊ</p> 
<p>These pants run small. We recommend sizing up.</p>  

내가 그 작동하지 않습니다 만들어 현재 공식이다 : (.) ​​

교체 (\ bDetails \ S +().)와 $ 3

출력 결과는 다음과 같습니다.

<p>100% Silk.</p> 
<p>Made in Portugal.</p> 
<h3>Fit</h3> 
<p>Model is 5‰Ûª10,‰Û size 2 wearing size 34.</p> 
<p>Size 34 measurements</p> 

OR 

<p>100% Velvet.</p> 
<p>Made in the United States.</p> 
<h3>Fit</h3> <p>Model is 5‰Ûª10‰Û, size 2 and wearing size M pants.</p> <p>Size M measurements Length: 37.5"åÊ</p> 
<p>These pants run small. We recommend sizing up.</p> 

`

원하는 문자열 만 캡처하려면 어떻게합니까? 팁 있으면 알려주세요! 고맙습니다!

+0

귀하의 정규식은 귀하가 설명한 결과를 제공하지 않습니다. regex101.com에서 예제를 제공 할 수 있습니까? –

답변

0

프로그램에 "제한된 정규식 기능"이 있다고 말하면서 상황에 맞는 솔루션을 제공하는 것이 어렵지만 어떤 한계가 있는지 설명하지는 마십시오. 여기

은 내가 개인적으로이 같은 뭔가를 BeautifulSoup을 사용 대상 문자열을

^(?:<h3>Details<\/h3>)(.*)$ 
+0

감사합니다! 나는 많은 질문을 던졌고 여기서 내가 발견 한 것은 일을 끝내었다. . * <[^>] *> 세부 정보 <[^>] *> \ <[^>] *> ([^ <] *) <. * –

0

을 캡처하는 작업을 시도 할 수 있지만, 여기에 두 가지 솔루션은 당신이 사용할 수있는 정규식입니다 :

일치 "Details"다음의 줄을 입력 한 다음 데이터를 꺼냅니다.

matches = re.findall('(?<=Details<).*$', text) 

matches = [i.strip('<>') for i in matches] 

matches = [i.split('<')[0] for i in [j.split('>')[-1] for j in matches]] 

다음 데이터를 찾을 수 "Detailsdata"와 "세부 <을 ...> 데이터"교체합니다.

text = re.sub('Details<.*?<.*>', '', text) 

matches = re.findall('(?<=Details).*?(?=<)', text)