关于利用正则表达式实现字符的切分

长笛党希望 2013-07-22 10:36:33
有这么一个字符串:
用户名(用户昵称)(用户编号(固定11位))
举例:
幽鬼(spe)(13812341234)
莱恩(lion)(13812341235)
正常情况下我们可以通过字符串"("切分获取手机号。
可以不可用正则表达式来获取手机号信息。
我想过用正则表达式可以获取数字。但是用户昵称里,用户填了数字,划分出来的数据就不是手机号了。
所以,有没有正则表达式来连续数字来实现。
可以分两种情况:
1、用户昵称中设置了填写长度(只能填5个)
2、用户昵称中没有设置填写长度。
小弟对正则表达式的使用不是很好,诚心求教。

...全文
393 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
oh_Maxy 2013-07-23
  • 打赏
  • 举报
回复
引用 19 楼 NNTT2010 的回复:
[quote=引用 16 楼 Inhibitory 的回复:]
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?(\\(.+?\\))?\\((\\d+)\\)";

        return str.replaceAll(pattern, "$2");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩((((1234567890))))(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩()(13812341235)"));
    }
}[code=java]
13812341235 13812341235 13812341235 13812341235 13812341235 13812341235[/code] 输出
这个可以有,而且更加简洁,谢谢二狗同学[/quote] 他这个有点小bug哦,LZ试试这个场景: System.out.println(getTelephoneNumber("莱恩((((1234567890))))(110)(13812341235)"));
长笛党希望 2013-07-23
  • 打赏
  • 举报
回复
引用 16 楼 Inhibitory 的回复:
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?(\\(.+?\\))?\\((\\d+)\\)";

        return str.replaceAll(pattern, "$2");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩((((1234567890))))(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩()(13812341235)"));
    }
}[code=java]
13812341235 13812341235 13812341235 13812341235 13812341235 13812341235[/code] 输出
这个可以有,而且更加简洁,谢谢二狗同学
长笛党希望 2013-07-23
  • 打赏
  • 举报
回复
引用 13 楼 oh_Maxy 的回复:
[quote=引用 9 楼 NNTT2010 的回复:] [quote=引用 8 楼 oh_Maxy 的回复:] [quote=引用 4 楼 NNTT2010 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:]

    public static void main(String[] args)
    {
        String str1 = "幽鬼(spe)(13812341234)";
        Pattern p = Pattern.compile("\\((\\d+)\\)");
        Matcher m = p.matcher(str1);
        
        if(m.find())
        {
            System.out.println("电话号码:"+m.group(1));
        }
    }
谢谢你的回答。 对于这个字符串可以成功。 但是用户将昵称改为12345677 也就是字符串 "幽鬼(12345677)(13812341234)" 用你这个方法就不行了哦。。。能不能改进下呢,期待中。[/quote] 那如何定义一个电话号码呢?是最后一个括号里的号码么? 比如“幽鬼(13812341234)(13812341235)”,我应该取哪个作为电话比较好?[/quote] 是最后一个括号中的11位数字,朋友。。[/quote]
引用 3 楼 tlfu_12344 的回复:
怎么没有电猫的手机号呢
如你所愿~

	public static void main(String[] args)
    {
        String str1 = "电猫()(110)(112)(13812341234)";
        StringBuilder sBuilder = new StringBuilder(str1);
        String strReverse = sBuilder.reverse().toString();
        Pattern p = Pattern.compile("\\)(\\d+)\\(");//这里的括号左右对调了
        Matcher m = p.matcher(strReverse);
        if(m.find())
        {
        	sBuilder.setLength(0);
        	sBuilder.append(m.group(1));
            System.out.println("电话号码:"+sBuilder.reverse());
        }
    }
改了下,看看客服和要求,最后一个括号内的电话。[/quote] 嗯,有用,不错。。。所有的试通了。。
长笛党希望 2013-07-23
  • 打赏
  • 举报
回复
引用 14 楼 tlfu_12344 的回复:
正则还是怪简单地,用处还不少,二个月前偶正则估计还不如lz,因为问人家正则还被鄙视过,于是偶就生气了 看了几天,后来找各种正则练,csdn上也不少,看到自己不会的就会马上搞起,会的别人有适合的回答的也就不写了,建议lz花时间看看,还是不错地
嗯嗯,蓝猫同学的精神可嘉额。。。等我偶空了,偶就去练练。谢谢。。
Inhibitory 2013-07-23
  • 打赏
  • 举报
回复
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?(\\(.+?\\))?\\((\\d+)\\)";

        return str.replaceAll(pattern, "$2");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩((((1234567890))))(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩()(13812341235)"));
    }
}[code=java]
13812341235 13812341235 13812341235 13812341235 13812341235 13812341235[/code] 输出
花木兰1闪21A 2013-07-22
  • 打赏
  • 举报
回复
怎么没有电猫的手机号呢
rencht 2013-07-22
  • 打赏
  • 举报
回复
手慢,大概就是1L的意思,要是用户名不让带小括号的话^_^
oh_Maxy 2013-07-22
  • 打赏
  • 举报
回复

    public static void main(String[] args)
    {
        String str1 = "幽鬼(spe)(13812341234)";
        Pattern p = Pattern.compile("\\((\\d+)\\)");
        Matcher m = p.matcher(str1);
        
        if(m.find())
        {
            System.out.println("电话号码:"+m.group(1));
        }
    }
花木兰1闪21A 2013-07-22
  • 打赏
  • 举报
回复
public static void main(String arg[]) {
		List<String> strList = new ArrayList<String>();
		String string = "风暴之灵(138123430)(13812341235)";
		String regex = "\\(((13|15|18)\\d{9})\\)";
		Pattern pattern = Pattern.compile(regex);
		Matcher m = pattern.matcher(string);
		while (m.find()) {
			strList.add(m.group(1));
		}
		if (!strList.isEmpty()) {
			System.out.println(strList.get(strList.size() - 1));
		}
	}
花木兰1闪21A 2013-07-22
  • 打赏
  • 举报
回复
正则还是怪简单地,用处还不少,二个月前偶正则估计还不如lz,因为问人家正则还被鄙视过,于是偶就生气了 看了几天,后来找各种正则练,csdn上也不少,看到自己不会的就会马上搞起,会的别人有适合的回答的也就不写了,建议lz花时间看看,还是不错地
oh_Maxy 2013-07-22
  • 打赏
  • 举报
回复
引用 9 楼 NNTT2010 的回复:
[quote=引用 8 楼 oh_Maxy 的回复:] [quote=引用 4 楼 NNTT2010 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:]

    public static void main(String[] args)
    {
        String str1 = "幽鬼(spe)(13812341234)";
        Pattern p = Pattern.compile("\\((\\d+)\\)");
        Matcher m = p.matcher(str1);
        
        if(m.find())
        {
            System.out.println("电话号码:"+m.group(1));
        }
    }
谢谢你的回答。 对于这个字符串可以成功。 但是用户将昵称改为12345677 也就是字符串 "幽鬼(12345677)(13812341234)" 用你这个方法就不行了哦。。。能不能改进下呢,期待中。[/quote] 那如何定义一个电话号码呢?是最后一个括号里的号码么? 比如“幽鬼(13812341234)(13812341235)”,我应该取哪个作为电话比较好?[/quote] 是最后一个括号中的11位数字,朋友。。[/quote]
引用 3 楼 tlfu_12344 的回复:
怎么没有电猫的手机号呢
如你所愿~

	public static void main(String[] args)
    {
        String str1 = "电猫()(110)(112)(13812341234)";
        StringBuilder sBuilder = new StringBuilder(str1);
        String strReverse = sBuilder.reverse().toString();
        Pattern p = Pattern.compile("\\)(\\d+)\\(");//这里的括号左右对调了
        Matcher m = p.matcher(strReverse);
        if(m.find())
        {
        	sBuilder.setLength(0);
        	sBuilder.append(m.group(1));
            System.out.println("电话号码:"+sBuilder.reverse());
        }
    }
改了下,看看客服和要求,最后一个括号内的电话。
长笛党希望 2013-07-22
  • 打赏
  • 举报
回复
引用 11 楼 Inhibitory 的回复:
[quote=引用 10 楼 NNTT2010 的回复:] [quote=引用 7 楼 Inhibitory 的回复:]
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?\\(.+?\\)\\((\\d+)\\)";

        return str.replaceAll(pattern, "$1");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
    }
}
输出
13812341235
13812341235
13812341235
谢谢二狗的回答。完全符合要求。 只是我还有疑问。。 用户如果在昵称中输入好多括号,变成:莱恩((((1234567890))))(13812341235)。你的程序也能找到相应的手机号。 只是有的用户没有填写昵称,我这里的字符串就是输出:"莱恩(13812341235)" 或者莱恩"()(13812341235)"。如果这样我怎么用正则表达式判断呢。。。 绝不是吹毛求疵。只是个人对正则的理解实在太少了。。小弟先谢谢了。[/quote] 你为什么不先跑一下程序呢? 如果先运行过了你就不会再问这个问题了。[/quote] 我跑过了。 莱恩(13812341235) 程序输出:莱恩(13812341235) 莱恩()(13812341235) 程序输出:莱恩()(13812341235)
Inhibitory 2013-07-22
  • 打赏
  • 举报
回复
引用 10 楼 NNTT2010 的回复:
[quote=引用 7 楼 Inhibitory 的回复:]
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?\\(.+?\\)\\((\\d+)\\)";

        return str.replaceAll(pattern, "$1");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
    }
}
输出
13812341235
13812341235
13812341235
谢谢二狗的回答。完全符合要求。 只是我还有疑问。。 用户如果在昵称中输入好多括号,变成:莱恩((((1234567890))))(13812341235)。你的程序也能找到相应的手机号。 只是有的用户没有填写昵称,我这里的字符串就是输出:"莱恩(13812341235)" 或者莱恩"()(13812341235)"。如果这样我怎么用正则表达式判断呢。。。 绝不是吹毛求疵。只是个人对正则的理解实在太少了。。小弟先谢谢了。[/quote] 你为什么不先跑一下程序呢? 如果先运行过了你就不会再问这个问题了。
长笛党希望 2013-07-22
  • 打赏
  • 举报
回复
引用 7 楼 Inhibitory 的回复:
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?\\(.+?\\)\\((\\d+)\\)";

        return str.replaceAll(pattern, "$1");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
    }
}
输出
13812341235
13812341235
13812341235
谢谢二狗的回答。完全符合要求。 只是我还有疑问。。 用户如果在昵称中输入好多括号,变成:莱恩((((1234567890))))(13812341235)。你的程序也能找到相应的手机号。 只是有的用户没有填写昵称,我这里的字符串就是输出:"莱恩(13812341235)" 或者莱恩"()(13812341235)"。如果这样我怎么用正则表达式判断呢。。。 绝不是吹毛求疵。只是个人对正则的理解实在太少了。。小弟先谢谢了。
长笛党希望 2013-07-22
  • 打赏
  • 举报
回复
引用 8 楼 oh_Maxy 的回复:
[quote=引用 4 楼 NNTT2010 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:]

    public static void main(String[] args)
    {
        String str1 = "幽鬼(spe)(13812341234)";
        Pattern p = Pattern.compile("\\((\\d+)\\)");
        Matcher m = p.matcher(str1);
        
        if(m.find())
        {
            System.out.println("电话号码:"+m.group(1));
        }
    }
谢谢你的回答。 对于这个字符串可以成功。 但是用户将昵称改为12345677 也就是字符串 "幽鬼(12345677)(13812341234)" 用你这个方法就不行了哦。。。能不能改进下呢,期待中。[/quote] 那如何定义一个电话号码呢?是最后一个括号里的号码么? 比如“幽鬼(13812341234)(13812341235)”,我应该取哪个作为电话比较好?[/quote] 是最后一个括号中的11位数字,朋友。。
oh_Maxy 2013-07-22
  • 打赏
  • 举报
回复
引用 4 楼 NNTT2010 的回复:
[quote=引用 1 楼 oh_Maxy 的回复:]

    public static void main(String[] args)
    {
        String str1 = "幽鬼(spe)(13812341234)";
        Pattern p = Pattern.compile("\\((\\d+)\\)");
        Matcher m = p.matcher(str1);
        
        if(m.find())
        {
            System.out.println("电话号码:"+m.group(1));
        }
    }
谢谢你的回答。 对于这个字符串可以成功。 但是用户将昵称改为12345677 也就是字符串 "幽鬼(12345677)(13812341234)" 用你这个方法就不行了哦。。。能不能改进下呢,期待中。[/quote] 那如何定义一个电话号码呢?是最后一个括号里的号码么? 比如“幽鬼(13812341234)(13812341235)”,我应该取哪个作为电话比较好?
Inhibitory 2013-07-22
  • 打赏
  • 举报
回复
public class Hello {
    public static String getTelephoneNumber(String str) {
        String pattern = ".+?\\(.+?\\)\\((\\d+)\\)";

        return str.replaceAll(pattern, "$1");
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getTelephoneNumber("莱恩(lion)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345)(13812341235)"));
        System.out.println(getTelephoneNumber("莱恩(12345abc)(13812341235)"));
    }
}
输出
13812341235
13812341235
13812341235
长笛党希望 2013-07-22
  • 打赏
  • 举报
回复
引用 3 楼 tlfu_12344 的回复:
怎么没有电猫的手机号呢
因为我真没蓝猫的手机号码啊。。
长笛党希望 2013-07-22
  • 打赏
  • 举报
回复
引用 2 楼 rencht 的回复:
手慢,大概就是1L的意思,要是用户名不让带小括号的话^_^
谢谢回答。 不过一楼的程序就算用户名带了小括号也会输出哦。就是有个小小的问题。
长笛党希望 2013-07-22
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:

    public static void main(String[] args)
    {
        String str1 = "幽鬼(spe)(13812341234)";
        Pattern p = Pattern.compile("\\((\\d+)\\)");
        Matcher m = p.matcher(str1);
        
        if(m.find())
        {
            System.out.println("电话号码:"+m.group(1));
        }
    }
谢谢你的回答。 对于这个字符串可以成功。 但是用户将昵称改为12345677 也就是字符串 "幽鬼(12345677)(13812341234)" 用你这个方法就不行了哦。。。能不能改进下呢,期待中。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧