2011-06-13 4 views
2

자리 표시 자 컨텐츠로 작성된 html 요소를 사용하여 텍스트 파일의 자리 표시자를 대체하려고합니다.자리 표시자를 식별하는 정규 표현식

예를 들어 나는 자리가 그래서 같은 나는이 점을 변환 할 {Image, picture.jpg, Centre, Picture Info}

: 나는 다음를 뒤로 작업, 모든 자리를 식별 할 수 Regex를 사용 찾고 있어요

<img src="urltopicture\picture.jpg" alt="Picture Info" class="quipImgCentre"></img> 

문서를 차례로 변환하고 각각을 교체하십시오.

정규식 {. *}은 한 줄에 하나의 자리 표시 자만 있지만 두 개 이상이 아닌 경우 작동합니다. 아래 텍스트에서 첫 번째 여는 자리 표시 자 "{" 마지막 "}".

Aenean non felis at est gravida tincidunt. {Link, news.bbc.co.uk, popup, 500, 800} Donec non diam a mauris vestibulum condimentum eu vitae mi! Aenean sed elit libero, id mollis felis! {Image, ServiceTile.jpg, Left} 

다른 사람이이 자리 표시 자 교체를 수행하는 더 좋은 방법이있는 경우 듣고 싶습니다.

+1

1. 정규 표현식을 공유하십시오. 2. 어떤 언어 또는 정규식 엔진을 사용하고 있습니까? –

+0

@Ed - 죄송합니다 C# - 내 Regex 위 : {. *} – BonyT

+0

알겠습니다. 고맙습니다. –

답변

3

를 반복하여 자리 표시 자 각각에 대해이 부분을 :

Regex PlaceholderExpander = new Regex(@"\{Image, ([^,]+), ([^,]+)(?:, ([^}]+))?\}"); 
string Expanded = PlaceholderExpander.Replace(YourHtmlStringWithPlaceholders, "<img src='$1' alt='$3' class='quipImg$2'></img>"); 

[^,] 수단 "모든 문자하지만 ,은"그래서 그 전에 중지 greedy+ 한정 기호에도 불구하고 다음 ,입니다. trick for processing speed입니다. 더 분명한 대안은 lazy (a.k.a. ungreedy, reluctant) quantifier을 사용하는 것입니다.

(?:…)non-capturing group입니다. $3과 같이 역 참조 할 수 없습니다. 선택적인 마지막 매개 변수에 속하는 부분을 포함하기 위해이 매개 변수를 사용했습니다. 마지막으로 ?과 함께 선택 사항으로 만들어졌습니다.

나는 선택 이제 마지막 매개 변수를했다, 그래서 나는이와 http://rextester.com/rundotnet이 테스트 한

<img src='ServiceTile.jpg' alt='' class='quipImgLeft'></img> 

결과 모두

{Image, picture.jpg, Centre, Picture Info} 

{Image, ServiceTile.jpg, Left} 

후자를 지원합니다 코드 :

string YourHtmlStringWithPlaceholders = "Aenean {Image, picture.jpg, Centre, Picture Info} non felis at est gravida tincidunt. {Link, news.bbc.co.uk, popup, 500, 800} Donec non diam a mauris vestibulum condimentum eu vitae mi! Aenean sed elit libero, id mollis felis! {Image, ServiceTile.jpg, Left}"; 

Regex PlaceholderExpander = new Regex(@"\{Image, ([^,]+), ([^,]+)(?:, ([^}]+))?\}"); 
string Expanded = PlaceholderExpander.Replace(YourHtmlStringWithPlaceholders,"<img src='$1' alt='$3' class='quipImg$2'></img>"); 

Console.WriteLine(Expanded); 
+0

음모를 꾸미는 방법 - 어떻게 사용합니까? – BonyT

+0

fantastic - 나는 처음 편집이 나의 호기심을 자극 할 때까지 정규 표현식이 이런 종류의 행동을 할 수 있다는 것을 알지 못했다. 그리고 나는 Capture Group에서 읽기 시작했다 : http://www.developerfusion.com/article/84524/deep-c- 정규 표현식 - 8211-the-director8217s-cut/- 내 문제를 해결했을뿐만 아니라 RegularExpressions에 대해 좀 더 배우기를 바랍니다. – BonyT

+0

나는 당신의 링크를 선호합니다 : http : //www.regular- expressions.info – BonyT

2

기본적으로 "ungreedy match"(? 참고)를 찾고 있습니다. 다음 :

/\{(.*?)\}/ 

중괄호 안에 일치하는 문자는 거의 없습니다. 거기에서, 형식을 따라야한다고 생각하는 방식에 따라 내용을 잡고 파싱해야합니다. 당신은 단지 이미지를 찾고 있다면

, 당신은, 물론, 그뿐만 아니라 지정할 수 있습니다 :

/\{Image (.*?)\}/ 
+0

브래드 - 감사합니다. – BonyT

1

내가 방금 \{[^{}\n\r]+} 같은 것을 원하는 것 같아요.

거기에 \n\r이 추가되었으므로 무작위로 {에 너무 많이 뛰지 않을 것입니다.

1

당신은 덜 욕심 정규식을 변경할 수 있습니다 {[^}]+}

+0

감사합니다. 에드 - 완벽한 – BonyT