0

我正在尝试使用正则表达式过滤字符串,我想从我的字符串中过滤出组合,还有一些 Seperate P,但是在提供的字符串中还有一些文本部分,例如:PB00121324,我想保留它P.

这是字符串:

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

我想过滤掉:seperate P's and 's

所以输出将是这样的:

PB014EC8F;1359300102;NL1200000001 ;Ey³

我现在正在使用此代码:

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

问题是它会导致:

B014EC8F;1359300102;NL1200000001 ;Ey³

而不是这个:

PB014EC8F;1359300102;NL1200000001 ;Ey³

有人知道这个正则表达式吗?

提前致谢!

4

2 回答 2

4

您可以使用它\b来查找单词边界,例如,正则表达式\bP\bP孤立地查找 a。

\bP\b...

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

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

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

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

回应您下面的评论 - 如果第一个正则表达式[..]旨在找到两个句号/句点,那么这不是它会做的事情。[]表示字符类,在字符类中提供重复字符是没有意义的。要匹配两个句号,请使用\.\.

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

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

但是要结合替换你会做的......

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

某种演示

于 2013-02-05T10:03:17.017 回答
2

试试这个正则表达式:

\bPÑ?\b

输入:

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

输出:

PB014EC8F;1359300102;NL1200000001  ;Ey³  
于 2013-02-05T10:07:17.300 回答