2015-02-08 65 views
0

我有一个需要替换结尾的单词列表。用正则表达式替换单词的末尾

Regex reg = new Regex("(.+)ings"); 
word = reg.Replace(word,"thly"); 

我想接着abcdeings =>abcdethly

,但我只得到thly

+1

这是因为你正在替换匹配正则表达式的字符串中的所有内容。为什么不使用usula'string.Replace'方法? – 2015-02-08 21:24:51

+0

我只想要结束替换,而不是字符串可能出现的开始或中间。 – 2015-02-08 21:26:10

+0

然后你需要处理正则表达式组。看看这篇文章,可能会有所帮助:https://msdn.microsoft.com/en-us/library/ewy2t5e0(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet -5 – 2015-02-08 21:27:40

回答

3

使用在字符串的结尾$选项,这标志着一个字符串的结尾,或者,在\b选项,它表示一个字边界

word = Regex.Replace(word, "ings$", "thly"); 
+0

@LucasTrzesniewski因为我测试了它,它不起作用。 'word = Regex.Replace(word,“ings \ b”,“thly”);'仍然返回'abcdeings' – Cyral 2015-02-08 21:42:52

+1

@Cyral - 将\改为\\或在字符串之前添加@就像在我的答案中一样。 – 2015-02-08 21:44:12

+1

@AmirPopovich添加一个@修复它:) – Cyral 2015-02-08 21:45:04

2

可以使用\b分隔符:

string word = Regex.Replace("abcdeings",@"ings\b","thly"); 

here

0

下面的正则表达式模式maches的位置下面的前缀

(?<=prefix)find\b 

在我们的例子中,我们使用\w+作为前缀,表示一个或多个单词字符

(?<=\w+)ings\b 

这工作,因为前缀不属于所选文字的一部分。

+0

你可以使用'\ B'来代替(不是字边界)。即'\ Bings \ b' – 2015-02-08 21:39:01

+0

这不适用于我的系统,但是用'(?<=。+)ings' – Cyral 2015-02-08 21:39:51

+0

@ LucasTrzesniewski的想法很好,很简单。 '\ Bings \ b'适合我(.NET)。不是在“结”之前结束的单词,而是在“结”之后结尾的单词。 – 2015-02-08 21:44:09

相关问题