【问题标题】:Pick string which contains both alphabets and numbers from the following strings从以下字符串中选择同时包含字母和数字的字符串
【发布时间】:2018-03-01 03:03:42
【问题描述】:
package regEx;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ReGex {

    public static void main(String[] args) {

        String[] s = {"asd", "123", "123abc", "@#$", "ASSF"};
        Pattern p = Pattern.compile("^[A-Z]*[a-z]*[0-9]*+$");
        for (String s1 : s) {
            Matcher m = p.matcher(s1);
            if (m.find()) {
                System.out.println(s1);
            }
        }
    }
}

【问题讨论】:

  • 还有……有什么问题吗?
  • "^[A-Z]*[a-z]*[0-9]*+$" 应该是 "^[A-Za-z0-9]+$"。我推荐 regex101 或类似的网站来测试你的正则表达式。
  • 不工作。 @Fildor
  • 信息不足@ManoChandran 请阅读How to Ask 并改进问题。

标签: java regex string


【解决方案1】:

为什么不只是s1.matches("[A-Za-z0-9]+")

String[] s = {"asd", "123", "123abc", "@#$", "ASSF"};
for (String s1 : s) {
    if (s1.matches("[A-Za-z0-9]+")) {
        System.out.println(s1);
    }
}

您的正则表达式^[A-Z]*[a-z]*[0-9]*+$ 并不是要匹配字母数字字符串,而是:

  • ^ 字符串开头
  • 应以零个或多个大写字母[A-Z]* 开头
  • 后跟零个或多个小写字母[a-z]*
  • 后跟零个或多个数字[0-9]*
  • +我不明白这是为什么
  • $ 字符串结束

编辑

我认为你的意思是输入应该包含字母和数字,在这种情况下你可以使用这个正则表达式来代替(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+):

if (s1.matches("(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)")) {

【讨论】:

  • 我得到以下输出:asd 123 123abc ASSF
  • 你应该得到什么@ManoChandran?
  • @ManoChandran 根据您的问题标题,这是所需的输出。
  • 我只想要字母数字的。即 123abc @YCF_L
  • @ManoChandran 在这种情况下你可以使用(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)检查我的编辑
猜你喜欢
  • 2021-12-13
  • 2013-05-27
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多