正则表达式基于特定模式匹配字符串

时间:2017-01-23 12:21:41

标签: c# regex matching multiline

如何根据具有一定数量字符的模式使用Regex匹配字符串?

示例:

|V.2|58|
10001|W20101|W20101|G00001||||學徒劍盾|8|9|768||-1|1||||||||40002||||||1|14||2||40027|40028|40029|40030||2|22|113|||||||||||2|50|100|7|||||
10002|W30101|W30101|G00001||||學徒大斧|9|9|768||-1|1||||||||40003||||||1|17||3||40031|40032|40033|40034||2|26|142|||||||||||2|50|100|9|||||

如果我知道每行有58个垂直条,那么我如何设置正则表达式以根据我的信息匹配这些字符串?而你也可以告诉你顶部的58是每个字符串中应该有的垂直条的数量。

10479|I00208||G00005||||青鐵礦|29||0||-1|30||||3|||||||||100|5|1||54|$53$原始的礦石,整體泛著鐵青的色澤。

#IMG$NoticeIcon#30~45級的副本掉落或跟公會商人購買。
$7$能與其他材料結合,製作40級的合金材料。
|||||||||||||||||||||||||||

另一个例子就是这个。这个有多行,但仍然在58个垂直条的范围内。

有没有办法根据垂直条的数量精确匹配模式?

提前致谢!

1 个答案:

答案 0 :(得分:1)

要回答您的直接问题,是的,您可以将其与正则表达式匹配:

^[^|]*(?:\|[^|]*){58}*$

使用RegexOptions.Multiline进行编译时,将匹配一行的第一个字符,直到恰好匹配58个条形(以及之后的任何非条形字符)。

测试live on regex101.com

但这完全不是上下文,所以它绝对依赖于这个数字。在您的示例文件中,您需要从匹配中排除第一行 - 否则这两个小节将包含在第一个匹配中。

但是,看起来你没有使用合适的工具来完成工作。也许CSV解析器更适合?您的多行数据样本似乎在包含换行符的条目中使用引号字符,这是CSV解析器可以处理的内容 - 它还将处理引号字段中出现条形的情况,这是此正则表达式无法执行的操作。 / p>