簡體   English   中英

根據確定性有限自動機每次到達最終狀態時是否拆分字符串?

[英]Split a string based on each time a Deterministic Finite Automata reaches a final state?

我有一個問題,該問題的解決方案可以通過迭代解決,但是我想知道是否存在使用正則表達式和split()的更優雅的解決方案

我有一個字符串(excel放在剪貼板上),從本質上說,它是逗號分隔的。 需要注意的是,當單元格值包含逗號時,整個單元格都用引號引起來(大概是為了避免該字符串中的逗號)。 示例字符串如下:

123,12,"12,345",834,54,"1,111","98,273","1,923,002",23,"1,243"

現在,我想將該字符串優雅地拆分為單個單元格,但是要注意的是,我不能使用帶有逗號作為定界符的普通拆分表達式,因為它將對值中包含逗號的單元格進行划分。 看待這個問題的另一種方式是,我只能用逗號分開,如果有偶數個逗號前引號。

這很容易通過循環來解決,但是我想知道是否存在一個能夠捕獲此邏輯的正則expression.split函數。 為了解決這個問題,我為邏輯構造了確定性有限自動機(DFA)。

替代文字

現在的問題簡化為:是否有辦法拆分此字符串,以便每次在DFA中達到最終狀態(此處為狀態4)時都生成一個新的數組元素(對應於/ s)?

使用正則表達式(不轉義) (?:(?:"[^"]*")|(?:[^,]*))

使用它並調用Regex.Matches(),它是.NET或在其他平台中的類似物。

您可以將上面的內容進一步擴展為: ^(?:(?:"(?<Value>[^"]*)")|(?<Value>[^,]*))(?:,(?:(?:"(?<Value>[^"]*)")|(?<Value>[^,]*)))*$

這將一次性解析整個字符串,但是您需要命名組和每個組的多捕獲功能才能工作(.NET支持)。

合格的逗號后還要加上偶數個引號,並且VBScript 確實支持先行。 嘗試對此進行拆分:

",(?=(?:[^""]*""[^""]*"")*[^""]*$)"

暫無
暫無

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

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