gpt4 book ai didi

java - 使用 RegEx 匹配而不是定界符拆分字符串

转载 作者:行者123 更新时间:2023-11-29 04:42:04 25 4
gpt4 key购买 nike

我想像这样拆分一个字符串:"1.2 5" 被标记为 {"1", ".", "2", "5"}(顺序很重要),我试图通过使用以下正则表达式的 String.split() 来做到这一点:([0-9])\w*|\.但这是我想要匹配的,而不是分隔符。

是否有其他方法可以做到这一点?甚至有可能拆分两个相连的词同时保持它们的完整性吗? (例如像上面的例子一样拆分“1.2”)

更多例子:

"1 2 8" => {"1", "2", "8"}

"1 122 .8" => {"1", "122", "."“8”

"1 2.800" => {"1", "2", "."“800”

最佳答案

这个正则表达式应该可以工作(demo):

s.split("(?=\\.)(?<! )|(?<=\\.)| +")

它通过拆分字符串中的位置来工作,其中:

  • 下一个字符是文字​​ . (向前看)并且前面的字符不是空格(负向后看)
  • 前面的字符是文字​​ . (向后看)
  • 有一个或多个空格字符

java split 函数删除字符串的任何匹配部分。在前瞻/后视匹配的情况下,它们是零宽度的,因此拆分时实际上不会消耗任何字符串。零宽度匹配基本上只是标记字符串中要拆分的位置。

此解决方案适用于所有给定的示例,也适用于多个空间。这是一个 demo .


回应您对 (?<! ) 的评论正则表达式的一部分。如果没有那部分,该模式匹配每个空格字符,以及每个 . 之前的位置在每个 . 之后.你的一个例子有一个空格后跟一个 . (例如 "2 .8" )会像这样拆分:

["2", "", ".", "8"]

注意第二个位置的空字符串。这是因为它在空格上split了,然后找到了一个.之前的位置, 也在那里 split 。 (?<! )通过说“如果前面没有空格字符,则仅在 . 之前拆分”来防止这种情况。

关于java - 使用 RegEx 匹配而不是定界符拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38787613/

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