c# - 在使用 C# 使用正则表达式查找字符串中的模式时需要帮助

标签 c# regex

我有一个格式如下的字符串..

"ABC 12.23-22-22-11|-ABC 33.20-ABC 44.00-ABC 11.00|ABC 12.23-22-22-11|-ABC 33.20-ABC 44.00-ABC11.00|ABC 12.23-22-22-11|-ABC 33.20-ABC 44.00-ABC 11.00";

我想做的是找到下一个以管道开头但后面没有 - 所以上面的字符串将指向 3 个部分,例如

ABC 12.23-22-22-11|-ABC 33.20-ABC 44.00-ABC 11.00
ABC 12.23-22-22-11|-ABC 33.20-ABC 44.00-ABC 11.00
ABC 12.23-22-22-11|-ABC 33.20-ABC 44.00-ABC 11.00

我尝试了以下代码,但它似乎没有做任何事情,它没有给我下一个 block 的位置,管道字符后面没有短划线 (-)

String pattern = @"^+|[A-Z][A-Z][A-Z]$";

在上面我的逻辑是

1:Start from the beginning
2:Find a pipe character which is not followed by a dash char
3:Return its position
4:Which I will eventually use to substring the blocks
5:And do this till the end of the string

请客气,因为我不知道正则表达式是如何工作的,我只是在尝试使用它。谢谢,语言是C#

最佳答案

您可以使用 Regex.Split method使用 \|(?!-) 的模式。

请注意,您需要对 | 字符进行转义,因为它是正则表达式中用于交替的元字符。 (?!-) 是一种否定式先行,当在 | 字符后遇到破折号时将停止匹配。

var pattern = @"\|(?!-)";
var results = Regex.Split(input, pattern);
foreach (var match in results) {
    Console.WriteLine(match);
}

关于c# - 在使用 C# 使用正则表达式查找字符串中的模式时需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150619/

相关文章:

regex - BASH_REMATCH 不捕获

c# - 在客户端计算机上使用 sql server DB 安装 C# 桌面应用程序

regex - 如何在 wget 中使用正则表达式来拒绝文件?

javascript - 正则表达式匹配单个特殊字符或特定序列

c# - 如何在C#中验证IP地址

javascript - 使用 RegExp 概念,如何编写一个函数来接受一个字符串,该字符串返回另一个所有大写字母连接在一起的字符串?

c# - 配置 Strict Cors .Net Core 3.1

c# - 简单的尾递归函数和循环一样高效吗?

c# - 如何在 VS2012 中从解决方案文件创建可执行文件?

c# - 当 ViewModel 改变时如何让 View 更新