2010-01-14 5 views
1

Regex가 첫 번째 문자와 마지막 문자를 확인하지만 공백이 아닌 IV 만 바꾸는 방법이 있습니까?Regex에서 도움이 필요하십니까 C#

Regex.Replace("This is IV item.", "[^A-Za-z0-9](IV)[^A-Za-z0-9]", "fourth"); 

MatchEvaluator 및 기타 일치 기반 것들에 대해 말하지 마십시오, 내가 한 줄 솔루션을 필요로하고, 하나 개의 라인이 결합 코드를 의미하지는 않습니다, 그것은 단지 방법을 교체 사용을 의미합니다. 또한

나는 내가 좋아하는, 모든 문자에 대해 일반적으로 이야기하고, 공백 만 이야기하고 있지 않다 : 분명히 나를 보자, 다시 한번 (

, 나는 일치하는 몇 가지 정규식 문자 이외의 다른 찾고 있지 않다 문자하지만이 방법을 대체하지 않습니다 : 그렇습니다,이 정규식으로

Regex.Replace("This is IV item.", "([^A-Za-z0-9])(IV)([^A-Za-z0-9])", "$1fourth$3"); 

을 것입니다 자동으로 자동으로 어떤 것을 $ 1을 사용하는 몇 가지 코드에 매개 변수는 다음과 그 코드를 변경하지 않으 $ 1은 IV 일 뿐이며 이전 문자도 확인합니다.

+0

을 당신은 이것에 대해 하나의 라이너가 필요합니까? – Rory

+0

Regex Replace는 내가 수정하고 싶지 않은 다른 lib에 있음을 이미 말했기 때문에. 정규식은 그것에 입력됩니다. 그래서 질문은 C# 코드가 아닌 정규 표현식 작성에 관한 것입니다. –

답변

2

그것의 수락 및 거부 싶지만이 같은 필요가 있다고 생각을 정확하게 귀하의 질문에 전혀 명확하지 : 난 그렇게 앞으로, 왜 물어으로 할 수있는 경우

Regex.Replace("This is IV item.", "(?<=[^A-Za-z0-9])(IV)(?=[^A-Za-z0-9])", "fourth"); 
+0

예, 이것이 내가 원하는 것입니다. –

2

찾으시는 분은 입니다.앞을 보시길 바랍니다.. (?<=\)IV(?!<=\)을 패턴으로 사용하십시오.

+0

+1 내가 뭘보고있는 그대로입니다. 죄송합니다.이 구문을 사용하면 문제가 발생하므로이 예제를 수락하십시오. –

+0

당신이'(? <= \) IV (? = \)'를 의미했다고 생각합니다. 어쨌든 OP는 주변 문자가 공백이 아닌 ASCII 문자와 숫자 이외의 문자가 될 수 있다고 말했다. –

5
Regex.Replace("This is IV item.", @"\bIV\b", "fourth"); 
+0

"이것은 IV 아이템입니다." 나는 그것이 어떤 상징 일 수 있다고 말했다. –

+0

"This is! IV item"에 해당합니다. 그것은 "This is \ _IV \ _ item."에 실패합니다. –

+0

단어 경계 (\ b) 방법은 매우 간단하고 자주 필요한 것입니다. 이것이 충분하지 않다면 look-behind/look-ahead 솔루션을 사용해야합니다. –

관련 문제