我有一个格式如下的字符串..
"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/