【问题标题】:Split on a space or line break在空格或换行符处拆分
【发布时间】:2016-12-15 07:12:34
【问题描述】:

我正在使用使用 C# 脚本的数据捕获软件 (PSI-Capture)。我需要知道将捕获的值转换为字符串然后在空格或换行符上拆分的最佳方法。我正在捕获一个全名字段(FirstName MiddleName Surname),有时它们位于一行或两行中。所以我需要拆分空格和换行符,以便我可以在单独的字段中填充名称的每个部分。

名字有时在一行中是这样的:

迈克尔·杰克逊

有时它们是这样的:

迈克尔·詹姆斯
杰克逊

【问题讨论】:

  • 你试过s.Split(new[] { '\n', '\r', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries)吗?

标签: c#


【解决方案1】:

您可以在space的基础上将NewLine替换为spacesplit

string str = str.Replace(Environment.NewLine," ");
string[] array = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

使用StringSplitOptions.RemoveEmptyEntries 将确保empty entries 中不会保留array

【讨论】:

  • 我的脚本技能非常有限,因为我还在学习它们,我最终完成了这个,但它一定有问题,因为我无法让它工作
  • if(dataField.Name == "Z_Name") { try { string str = str.Replace(Environment.NewLine," "); string[] array = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string actualName = Regex.Replace(Z_Name, @"\r\n?|\n|\s+", "-"); string[] nm = actualName.Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries);名字 = nm[0]; if(nm.Length > 2) { 中间名 = nm[1];姓氏 = nm[2]; } 其他 { 姓氏 = nm[1]; } } }
【解决方案2】:

nameInputText 成为用户输入,然后您可以尝试以下方法来获取所需的用户名部分数组:

string  actualName = Regex.Replace(nameInputText, @"\r\n?|\n|\s+", "-");
string[] partsOfName = actualName.Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries);

在此示例中,您将在actualName 变量中获得MICHAEL-JAMES-JACKSON,通过基于- 的拆分将为您提供所需的元素数组,即名称的部分

【讨论】:

    【解决方案3】:

    这可能对你有用

    names = names.Replace(Environment.NewLine, " "); // as suggested by @Dmitry Bychenko
    string[] nm = names.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    

    现在如果 string[] nm 包含 2 个元素,这意味着该名称没有中间名,所以

    firstname = nm[0];
    if(nm.Length > 2)
    {
        middlename = nm[1];
        lastname = nm[2]
    }
    else 
    {
        lastname = nm[1]
    }
    

    【讨论】:

    • Environment.NewLine 而不是"\r\n" 是更准确的实现
    • 请将nm.Length>=2 更改为nm.Length>2。如果 nm 包含 2 个元素 nm[2] 将抛出异常。
    • 不错的收获@erikscandola。完毕。谢谢:)
    猜你喜欢
    • 2014-06-02
    • 1970-01-01
    • 2022-08-18
    • 2013-05-31
    • 2010-12-13
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多