【问题标题】:Java Regex, how to stop matching when a certain symbol is foundJava Regex,找到某个符号时如何停止匹配
【发布时间】:2016-04-09 14:40:48
【问题描述】:

我最近接触了正则表达式的东西。有些事情让我非常烦恼。

如果后面没有特定符号,如何将我的正则表达式设置为仅匹配某些单词。 例如 假设我有一个包含一些普通单词和一些以大写字母结尾的单词的文本。如果单词后面没有大写字母,我如何让我的正则表达式检测到该单词。

Just some sample texT with wordS. ThiS should be Matched.

据此,我希望我的正则表达式匹配除“textT、wordS 和 ThiS”之外的所有单词。

提前感谢您的帮助:)

【问题讨论】:

    标签: java regex character match


    【解决方案1】:

    您可以通过几种方式做到这一点。可能涉及word boundaries \b

    \b can 将只匹配

    • 在字母和非字母字符之间
    • 在输入的开始或结束时

    所以为了确保我们匹配整个单词,我们可以用\b 包围\w+,比如\b\w+\b
    现在,为了确保您找到的单词不以大写字母结尾,我们可以简单地要求最后一个字符应为小写(在a-z 范围内)。

    所以我们可以将正则表达式重写为\b\w+[a-z]\b

    【讨论】:

    • 嗯,这几乎解决了我的问题。 (实际上它解决了我描述的问题 100%)..但我想知道另一件事。我怎么能忽略以数字结尾的单词。例如“somE#####word21”...如何从中提取“som”和“word”?
    • @Kobek 抱歉,AFK,连接有问题。在这种特殊情况下,您可以只搜索像[a-z]+ 这样的小写字符,但有些事情告诉我,这也可能不是您真正想要实现的:)
    • @Kobek 既然您同意这个答案解决了问题中描述的问题,请考虑accepting it。也让我知道我之前评论中的解决方案是否对您有用。
    • @Kobek 但是,如果您认为自己提出了错误的问题,并且您不相信在当前状态下它对任何人都有帮助,请随时删除它(我不介意案例,因为根据您的评论,它看起来像 XY problem 的另一个案例,根据我的编辑经验,它吸引新答案的机会非常低。
    猜你喜欢
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多