2017-01-23 69 views
-1

如何使用基於模式的正則表達式匹配字符串以及一定量的字符以查找?基於特定模式的正則表達式匹配字符串

例子:

|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個垂直條的範圍內。

有沒有辦法精確匹配基礎上的豎條有量的格局?

在此先感謝!

+0

不清楚你確切需要什麼?你能解釋得更清楚嗎? –

+0

是否只有垂直條紋數量的信息?或者你有什麼信息應該在豎條X和X + 1之間應該是什麼字符串? (用於驗證) –

+1

'line.Split('|')。Length == 58'? –

回答

1

要回答你的眼前問題,是的,你可以用正則表達式匹配這個:

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

使用RegexOptions.Multiline編譯時,將匹配從行的第一個字符,直到恰好58條(及任何非之後的酒吧人物)已被匹配。

測試它live on regex101.com

它是完全的上下文不知道,不過,因此它完全依賴於這個數字。在你的示例文件中,你需要從匹配中排除第一行 - 否則這兩個小節將包含在第一個匹配中。

但是,它看起來像你不使用該工作的工具。也許一個CSV解析器會更適合?看來你的多行數據樣本在包含換行符的條目中使用了一個引號字符,這是CSV解析器可以處理的事情 - 它也將處理引用字段中出現條形的情況,這是正則表達式無法實現的。

+0

非常感謝您的回答蒂姆。我沒有看過哪些工具實際上更適合這種工作,所以我會查找它。自從正則表達式匹配後,我認爲它可以完成這項工作,但它非常麻煩。 – Eperty123

+0

另外如果有59而不是58呢?剛剛測試出來,它無法匹敵。我該如何克服這一點? – Eperty123

+0

我認爲把'59'代替'58'不適合你嗎?然後你幾乎不走運 - 否則正則表達式應該如何判斷數據集是否在58行之後結束時結束?也許第59條是在下一條線的開始 - 也許下一條記錄從那裏開始... –

相關問題