2010-01-14 47 views
1

有没有一种方法,正则表达式将检查第一个和最后一个字符,但将只替换IV而不是空格。在正则表达式中需要帮助替换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 2010-01-14 17:09:27

+0

已经告诉正则表达式替换是在一些其他的库,我不想修改。正则表达式就是对此的输入。所以问题是关于编写正则表达式而不是C#代码。 – 2010-01-14 17:13:34

回答

2

这不完全是从你的问题清楚你想要什么,以接受和拒绝,但我认为你需要的是这样的:

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

是的,这是我想要的。 – 2010-01-14 17:24:32

2

你在找什么都叫做的背后展望未来。 尝试使用(?<=\)IV(?!<=\)作为模式。

+0

+1正如我所看到的。对不起,不接受这个原因,我遇到了给定的语法问题,所以接受了这个例子。 – 2010-01-14 17:27:36

+0

我想你的意思是'(?<= \)IV(?= \)'。无论如何,OP说周围的角色可能不是ASCII字母和数字,而不仅仅是空格。 – 2010-01-14 21:19:36

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

“这是!IV项目”。我说它可以是任何符号。 – 2010-01-14 17:25:27

+0

这适用于“This is!IV item”。它失败了“这是\ _IV \ _项目,尽管”。 – 2010-01-14 17:30:17

+0

字边界(\ b)方法非常简单,并且经常是您所需要的。如果这还不够,那么你应该使用后视/前瞻解决方案。 – 2010-01-14 17:48:19