【问题标题】:Regex Replace Character combinations正则表达式替换字符组合
【发布时间】:2013-02-05 09:59:28
【问题描述】:

我正在尝试使用正则表达式过滤字符串,我想从我的字符串中过滤出 组合,以及一些单独的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³

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

提前致谢!

【问题讨论】:

  • 你所说的“一些单独的 P”是什么意思?在该示例字符串中的哪个位置,您要删除的 P 后面没有 Ñ?
  • 它不在示例中,但有时,我得到的字符串中充满了随机的单独 P,例如 B014EC8F;1359 P B014EC8F;1359
  • 我建议您编辑您的帖子以包含更多示例以及应该是什么输出

标签: c# .net regex visual-studio


【解决方案1】:

您可以使用\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

【讨论】:

  • 谢谢,您是否知道将所有这些正则表达式转换为一个的方法? string cleanData = Regex.Replace(DisplayText, @"[..]", "");字符串 evenCleanerData = Regex.Replace(cleanData, @"[\\Ñ?]", "");字符串 cleanestData = Regex.Replace(evenCleanerData, @"\bP\b", ""); string uberclean = Regex.Replace(cleanestData, " ", "");
  • 第一个正则表达式打算做什么?
【解决方案2】:

试试这个正则表达式:

\bPÑ?\b

输入:

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

输出:

PB014EC8F;1359300102;NL1200000001  ;Ey³  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2012-11-07
    • 2015-11-30
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多