解析字符串中管道分隔符内的文本[重复]

Posted

技术标签:

【中文标题】解析字符串中管道分隔符内的文本[重复]【英文标题】:Parse out text inside pipe delimeter in string [duplicate] 【发布时间】:2019-06-18 19:01:51 【问题描述】:

c# 我需要帮助将管道字符中的单词解析为字符串列表。

“您可以在入住前 |720| 之前免费取消。如果您在入住前 |720| 取消,您将需要支付 |407.74 美元|。”

字符串列表应包含两项。 720 和 407.74 美元。

谢谢

【问题讨论】:

string.Split。每一秒条目都可能是您想要的条目。 我玩过变奏曲,你说得对。它始终是列表中的偶数元素。谢谢。 【参考方案1】:
private static IEnumerable<string> GetStringsBetweenDelimiters(string str, char delimiter)

    int openingIndex = default; //index of the opening delimiter
    int closingIndex = -1; //starts from -1 as otherwise it would not work for string
                           //starting with delimiter

    while (true)
    
        openingIndex = str.IndexOf(delimiter, closingIndex + 1);
        //it has to be +1'd as otherwise it would return closingIndex
        if (openingIndex < 0) yield break; //No more delimiters
        closingIndex = str.IndexOf(delimiter, openingIndex + 1);
        //+1'd for same reason as above
        if (closingIndex < 0) //No closing delimiter
            throw new InvalidOperationException("The given string has odd number of delimiters.");
        //Might just break as well?

        yield return str.Substring(openingIndex + 1, closingIndex - openingIndex - 1);
    

当像GetStringsBetweenDelimiters(str, '|') 这样调用时,这个方法只会返回两个竖线字符之间的值。这种方法优于 string.Split(delimiter) 的优点是它不会分配不在管道字符之间的不必要的子字符串(You can cancel free of charge untilbefore check-in. You’ll be charged...),而且使用起来可能更简单。

测试:

foreach (string str in GetStringBetweenDelimiters(testStr, '|'))

    Console.WriteLine(str);

打印

720
407.74USD
720

【讨论】:

以上是关于解析字符串中管道分隔符内的文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则 grep 管道符号 “|” 特殊符号“||”“&&” wc 命令 分隔符号cut 排序sort 去重复uniq 符号 ` `的使用

使用字符分隔符在 C++ 中解析字符串,但在每个解析的子字符串中保留可重复的字符作为分隔符(C++ STL)

基于SQL Server中的分隔符将文本拆分为多列

用子字符串替换后续分隔符之间的字符串

字符串 CSV解析 表格 逗号分隔值

用于根据空格分隔符拆分文本的正则表达式 [重复]