【问题标题】:Remove characters before reaching a set of wanted characters in a string在字符串中到达一组想要的字符之前删除字符
【发布时间】:2015-11-18 23:14:50
【问题描述】:

我有这个字符串来自带有 ID/Passport 阅读器的虚拟串行端口:

b\0OU0IDBGR9247884874

我已将“/r”替换为“|”字符。

我想解决的问题总是在到达字符串中的第一个字符组合之前删除字符,这可能是: "ID","I

这是现阶段的问题,我尝试了以下方法来删除字符,但没有成功:

public static string RemoveSpecialCharacters(string str)
    {
        StringBuilder sb = new StringBuilder();
        foreach (char c in str)
        {
            if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_' || c == '<' )
            {
                sb.Append(c);
            }
        }
        return sb.ToString();
    }

【问题讨论】:

  • 能否请您也显示预期的输出? (在您提供的示例输入之后)。我没有得到这部分 remove the characters before reaching the first combination of characters in the string which might be: "ID","I&lt;","P&lt;" &amp; "V&lt;" "VI" 所以如果你显示预期的结果它可能会有所帮助。
  • “不要使用签名、标语或问候语。” stackoverflow.com/help/behavior
  • 谢谢,我错过了!关于输出,它应该是:IDBGR9247884874

标签: c# regex string split character


【解决方案1】:

在到达字符串中的第一个字符组合之前删除字符,可能是:"ID","I

我想会做你想做的事。

string s = "b\0OU0IDBGR9247884874<<<<<<<<<<<<<<<|8601130M1709193BGR8601138634<3|IVANOV<";
s = string.Join("", Regex.Split(s, "(ID|I<|P<|V<|VI)").Skip(1));

首先它将字符串拆分为您想要的字符组合(同时将它们保留在结果数组中 - 请参阅正则表达式字符组),然后丢弃数组的第一个成员(这将是字符组合之前的所有字符。 ) 然后它将数组连接在一起。

【讨论】:

  • 非常感谢您的建议。我会在星期一试一试。我会给你反馈!再次感谢!
  • 我确信它会起作用,因为我的输出与您想要的输出相同:)
  • 再次感谢您,我想我也会在另一个模块中使用它!
  • 好了,终于有时间测试了。奇怪的是,当我使用这种语法 'string s = mySerialPort.ReadExisting().Replace('\r', '|'); s = string.Join("", Regex.Split(s, "(ID|IIVANOV 这是正则表达式的一部分,它删除了字符串前面的部分。有什么建议如何在第一次遇到这种组合之前只删除字符?
  • 请原谅我没有正确提及代码,但它没有让我能够编辑我的评论,并说我只能在 5 分钟内编辑它。 :(
猜你喜欢
  • 2014-07-17
  • 1970-01-01
  • 2013-07-05
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多