我正在尝试使用Regex过滤字符串,我想从我的字符串中过滤PÑ
组合,还有一些单独的P
,但是在提供的字符串中是还有一些文字部分,例如:PB00121324
,我想保留P
。
这是字符串:
PB014EC8F;1359300102;NL1200000001 ;Ey³ PÑ PÑ B014EC8F;1359 P B014EC8F;1359
我想过滤掉:分开P
和PÑ
的
这样输出就是这样:
PB014EC8F;1359300102;NL1200000001 ;Ey³
我现在正在使用此代码:
string CleanString = Regex.Replace(DirtyString, @"[\\PÑ?]", "");
问题在于它会导致:
B014EC8F;1359300102;NL1200000001 ;Ey³
而不是:
PB014EC8F;1359300102;NL1200000001 ;Ey³
有人知道正则表达式吗?
提前致谢!
答案 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 :)
答案 1 :(得分:2)
试试这个正则表达式:
\bPÑ?\b
输入:
PB014EC8F;1359300102;NL1200000001 P ;Ey³ PÑ PÑ
输出:
PB014EC8F;1359300102;NL1200000001 ;Ey³