簡體   English   中英

正則表達式基於特定模式匹配字符串

[英]Regex match strings based on a certain pattern

如何根據具有一定數量要查找的字符的模式使用正則表達式匹配字符串?

例子:

|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 解析器可以處理的 - 並且它還將處理在引用字段中出現條形的情況,這是該正則表達式無法做到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM