如何使用正则表达式匹配基于具有一定数量字符的模式的字符串?
例:
|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 个垂直条的范围内。
有没有办法根据垂直条的数量精确匹配模式?
提前感谢!
要回答您的直接问题,是的,您可以使用正则表达式将其匹配:
^[^|]*(?:|[^|]*){58}*$
使用 RegexOptions.Multiline
编译时,将从一行的第一个字符开始匹配,直到匹配正好 58 个小节(以及之后的任何非小节字符)。
在 regex101.com 上实时测试。
不过,它完全无法感知上下文,因此它绝对依赖于该数字。在示例文件中,您需要从匹配中排除第一行 - 否则这两个条形将包含在第一个匹配项中。
但是,看起来您没有使用正确的工具来完成这项工作。也许CSV解析器更适合?您的多行数据示例似乎在包含换行符的条目中使用引号字符,这是 CSV 解析器可以处理的 - 它还将处理带引号的字段中出现条形的情况,这是此正则表达式无法做到的。