【发布时间】:2021-09-26 20:15:04
【问题描述】:
我想使用Pattern.split(String) api 根据正则表达式模式拆分输入字符串。正则表达式同时使用正面和负面的前瞻。正则表达式应该在分隔符 (,) 上拆分,如果分隔符包含在双引号 ("x,y") 中,则需要忽略分隔符。
正则表达式是 - (?<!(?<!\Q\\E)\Q\\E)\Q,\E(?=(?:[^\Q"\E]*(?<=\Q,\E)\Q"\E[[^\Q,\E|\Q"\E] | [\Q"\E]]+[^\Q"\E]*[^\Q\\E]*[\Q"\E]*)*[^\Q"\E]*$)
此拆分调用超时的输入字符串是 -
"","1114356033020-0011,- [BRACKET],1114356033020-0017,- [FRAME],1114356033020-0019,- [CLIP],1114356033020-0001,- [FRAME ASSY],1114356033020-0013,- [GUSSET],1114356033020-0015,- [STIFFENER]","QH20426AD3 [RIVET,SOL FL HD],UY510AE3L [NUT,HEX],PO41071B0 [SEALING CMPD],LL510A3-10 [\"BOLT,HI-JOK\"]"
我读到查找技术很繁重,如果字符串太长,可能会导致超时。如果我删除字符串末尾包含[\"BOLT,HI-JOK\"] 的反斜杠,那么正则表达式就能够检测和拆分。
该模式也没有检测到[STIFFENER]","QH20426AD3 位置的第一个分隔符与上述字符串。但是,如果我删除字符串末尾包含 [\"BOLT,HI-JOK\"] 的反斜杠,那么正则表达式就能够检测到它。
我对正则表达式中的查找不是很有经验,有人可以提供有关如何优化此正则表达式并避免超时的提示吗? 任何指针,文章链接表示赞赏!
【问题讨论】:
标签: java regex pattern-matching regex-lookarounds regex-greedy