gpt4 book ai didi

java - 将字符串匹配为二维整数数组的正则表达式

转载 作者:行者123 更新时间:2023-11-29 03:07:05 24 4
gpt4 key购买 nike

我正在寻找一个正则表达式来识别可能是具有相同长度列的二维整数数组的字符串。

例如这是一个字符串,我想将其转换为二维数组:

0 4 8 4\n9 6 5 7\n9 5 5 1

这可能是:

0 4 8 4
9 6 5 7
9 5 5 1

所以我想到了这个:"(([0-9]+[\t]?)+(\n|\r)?){1,}" 然而它的确如此不检查列是否具有相同的长度。谢谢你的帮助。

最佳答案

您可以使用这种模式(如果需要,添加可选的 CR):

(?m)^(?>(?>\\d+([ \\t]|$)(?=.*\\n(\\2?+\\d+\\1)))+\\n(?=\\2$))+.*

demo (单击 java 按钮)

对于第一行中的每个项目,先行检查同一列中的项目是否存在于下一行中。要知道列是否相同,捕获组 2 包含一个可选的自引用 \\2?+。这样,每次重复“项目”组(并到达下一列)时,捕获组 2 都会增长。

详情:

(?m) # use the multiline mode
^ # start of the line
(?> # group for a complete line
(?> # group for an item
\\d+ ([ \\t]|$) # a number followed by a space/tab or the end of the line
(?= # looakead
.*\\n # reach the next line
(\\2?+\\d+\\1) # capture group 2
)
)+ # repeat the item group
\\n
(?=\\2$) # check if there isn't more columns in the next line
)+ # repeat the line group
.* # match the next line

注意:此模式检查分隔符是否唯一(不重复)并且始终与 ([\\t]|$)\\1 相同(在捕获组 2)。不允许使用前导和尾随空格。但是你可以用更灵活的方式来写:

(?m)^(?>[ \\t]*(?>\\d+[ \\t]*(?=.*\\r?\\n(\\1?+\\d+(?:[ \\t]+|[ \\t]*$))))+\\r?\\n(?=\\1$))+.*\\2$))+.*

这些模式可以与 matches() 一起使用来检查整个字符串,或者与 find() 一起使用以在更大的字符串中查找最终数组。

关于java - 将字符串匹配为二维整数数组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com