【问题标题】:How to find and skip special characters at the start and end of the word如何在单词的开头和结尾查找和跳过特殊字符
【发布时间】:2017-05-10 11:09:12
【问题描述】:

正则表达式新手并使用以下代码查找单词是否在结尾/开头包含特殊字符。

String s = "K-factor:";
        String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[0-9_+]*$";
        Matcher matcher = Pattern.compile(regExp).matcher(s);
        while (matcher.find()) {
            System.out.println("Start: "+ matcher.start());
            System.out.println("End: "+ matcher.end());
            System.out.println("Group: "+ matcher.group());
            s = s.substring(0, matcher.start());
        }

想查找字符串的开头或结尾是否有任何特殊字符(在此示例代码中为:)。试图跳过角色。 既没有编译时错误,也没有输出。

【问题讨论】:

  • 开头和结尾有字母以外的字符要匹配吗?然后使用"^\\P{L}|\\P{L}$"。您的正则表达式与 K-factor 不匹配,因为它最后包含 :
  • 感谢@WiktorStribiżew 工作得很好。请张贴作为答案,以便其他人可以参考。

标签: java regex


【解决方案1】:

请注意,您的正则表达式匹配一个不包含您在字符类中定义的字符的整个字符串。有问题的字符串与该模式不匹配,因为它包含:

您可以考虑将模式分成两部分,以使用交替组在开头或结尾检查不需要的字符:

String regExp = "^[<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[0-9_+]|[<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[0-9_+]$";

在这里,模式有一个^&lt;special_char_class&gt;|&lt;special_char_class&gt;$ 结构,^ 将匹配锚定在开头,$ 将匹配锚定在字符串结尾,| 是交替运算符。请注意,我从字符类的开头删除了^,以使它们而不是否定,以便它们可以匹配类中定义的那些字符/范围。

或者,如果字符串在开始/结束处包含非字母,您似乎只是匹配一个字符串,您可以使用

String regExp = "^\\P{L}|\\P{L}$";

即识别 Unicode 字母或 - 仅 ASCII:

String regExp = "^\\P{Alpha}|\\P{Alpha}$";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多