split函数正则匹配,如何让前面不是数字的冒号作为分割符

发布于 2022-09-04 10:25:02 字数 591 浏览 18 评论 0

本吊这里写小代码有个需求,就是分割字符串中的键值对,字符串中键值对之间是用冒号隔开的,但是有一些值中本身就存在冒号,比如时间,请问如何正确的分割冒号呢。。

希望能做到的就是,我以":"为分割符,但是如果冒号前面是数字就不是分隔符了
也就是说只有 冒号前面不是数字的 这个冒号才是分割的凭证

已知字符串

String str="姓 名:王尼玛 性 别: 男 播音时间: 每天10:20PM";

请注意一下,空格不能作为分隔符,因为不知道哪里就会出现一个空格,比如姓名中间可能会有空格,冒号后面可能出现空格,各种情况都有的


求如何将其分割为

["姓 名","王尼玛 性 别","男 播音时间"," 每天10*:*20PM"]

再更深入一些,就是如何分割为

[["姓名","王尼玛"],["性别","男"],["播音时间","每天10*:*20PM"]]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

物价感观 2022-09-11 10:25:02

/:(?!\d)/


ES6

> str="姓名:王尼玛 性别:男 播音时间:每天10:20PM";
> str.split(" ").forEach((s)=>console.log(s.split(/:(?!\d)/)))
[ '姓名', '王尼玛' ]
[ '性别', '男' ]
[ '播音时间', '每天10:20PM' ]
undefined
>

正则都差不多,就用js演示一下~


java

import java.util.Arrays;
public class HelloWorld{
    public static void main(String[] args) {
        String[] sarr = "姓名:王尼玛 性别:男 播音时间:每天10:20PM".split(" ");
        String[][] Arr=new String[sarr.length][];
        for (int i=0;i<sarr.length;i++) {
            Arr[i]=sarr[i].split(":(?!\\d)");
            sarr[i]=Arrays.toString(sarr[i].split(":(?!\\d)"));
        }        
        System.out.println(Arrays.toString(sarr));
    }
}
//[[姓名, 王尼玛], [性别, 男], [播音时间, 每天10:20PM]]

java写程序很繁琐,叠床架屋的~

用python就轻松多了~

r'([^:]+):(?!\d)([^ ]+)'

>>> import re
>>> s="姓 名:王尼玛 性别:男 播音时间:每天10:20PM";
>>> p=re.compile(r'([^:]+):(?!\d)([^ ]+)')
>>> p.findall(s)
[('姓 名', '王尼玛'), (' 性别', '男'), (' 播音时间', '每天10:20PM')]
鹊巢 2022-09-11 10:25:02
String str = "姓名:王尼玛 性别:男 播音时间:每天10:20PM";
List<String> list = new ArrayList<>();
for (String s : str.split(" ")) {
    int i = s.indexOf(":");
    list.add(s.substring(0, i));
    list.add(s.substring(i + 1));
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文