例如,假设我有一个字符串读取 "1this12string"
。我想将 String#split
与正则表达式一起使用,使用前瞻,这会给我 ["1this", "12string"]
。
我当前的语句是 (?=\d)
,它非常适用于一位数。我无法修改此语句以包含 1 位和 2 位数字。
答案 0 :(得分:1)
答案 1 :(得分:1)
如果你真的想使用 Regex Lookahead,试试这个:
(\d{1,2}[^\d]*)(?=\d|\b)
请注意,这假设每个字符串拆分必须在前面有 1 或 2 位数字。如果情况并非如此,请告知我们,以便我们进一步改进。
\d{1,2}
匹配前面的 1 或 2 位数字[^\d]*
匹配前 1 或 2 位数字之后的非数字字符(?=\d
满足您使用 Regex Lookahead 的要求|\b
允许匹配的文本位于文本的末尾(就在单词边界之前)我认为您也可以使用更简单的正则表达式来完成您的任务,而无需使用诸如 Regex Lookahead 之类的相对更复杂的功能。例如:
\d{1,2}[^\d]*
您可以在 Regex Demo 中看到这同样适用于您的示例输入。无论如何,如果您的要求不止于此,请告诉我们进行微调。
答案 2 :(得分:0)
使用
[root@ip-192-168-1-146 ~]# ls /bin/mkdir
/bin/mkdir
[root@ip-192-168-1-146 ~]# which mkdir
/bin/mkdir
[myuser@ip-192-168-1-146 ~]$ which mkdir
/bin/mkdir
说明
String[] splits = string.split("(?<=\\D)(?=\\d)");