正则表达式替换字符组合

时间:2013-02-05 09:59:28

标签: c# .net regex visual-studio

我正在尝试使用Regex过滤字符串,我想从我的字符串中过滤组合,还有一些单独的P,但是在提供的字符串中是还有一些文字部分,例如:PB00121324,我想保留P

这是字符串:

PB014EC8F;1359300102;NL1200000001 ;Ey³ PÑ PÑ B014EC8F;1359 P B014EC8F;1359

我想过滤掉:分开P

这样输出就是这样:

PB014EC8F;1359300102;NL1200000001 ;Ey³

我现在正在使用此代码:

string CleanString = Regex.Replace(DirtyString, @"[\\PÑ?]", "");

问题在于它会导致:

B014EC8F;1359300102;NL1200000001 ;Ey³

而不是:

PB014EC8F;1359300102;NL1200000001 ;Ey³

有人知道正则表达式吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

您可以使用\b查找字边界,例如,正则表达式\bP\b会隔离找到P

使用\bP\b ...

输入Hello P Goodbye - > P与空格(非单词字符)相邻匹配

输入HelloP Goodbye - > P不匹配,因为它与前一个单词

相邻

输入Hello.P.Hello - > P匹配,因为它与非单词字符相邻

输入P Hello - > P匹配,因为它与字符串的开头和空格相邻。

在回复下面的评论时 - 如果第一个正则表达式[..]旨在找到两个完整停止/句点,则它将执行的操作。 []表示一个字符类,在字符类中提供重复的字符是没有意义的。要匹配两个句号,请使用\.\.

我不确定是否可以合并为一个正则表达式,因为执行顺序非常重要......

Hello..P..S是孤立的P.但是,在删除..后,我们HelloPS不是孤立的P.组合多个替换很容易,但它们都会“同时”有效地发生,而您当前的方法是一个,然后是下一个,然后是下一个。 ie - 每次输入都不同。

然而,要结合替换,你会做...

 string cleanData = 
 Regex.Replace(DisplayText, @"(\.\.|\bPÑ?\b| )", ""); //untested :)

Sort of demo

答案 1 :(得分:2)

试试这个正则表达式:

\bPÑ?\b

输入:

PB014EC8F;1359300102;NL1200000001 P ;Ey³ PÑ PÑ

输出:

PB014EC8F;1359300102;NL1200000001  ;Ey³