【问题标题】:java string split on all non-alphanumeric except apostrophesjava字符串拆分除撇号以外的所有非字母数字
【发布时间】:2015-06-15 01:32:49
【问题描述】:

所以我想在 java 中将字符串拆分为任何非字母数字字符。

目前我一直是这样的

words= Str.split("\\W+");

但是我想在其中保留撇号(“'”)。是否有任何正则表达式可以保留撇号但踢掉其余的垃圾?谢谢。

【问题讨论】:

    标签: java regex


    【解决方案1】:
    words = Str.split("[^\\w']+");
    

    只需将其添加到字符类中。 \W 等价于[^\w],然后您可以将' 添加到。

    但请注意,\w 实际上也包含下划线。如果你也想在下划线上拆分,你应该改用[^a-zA-Z0-9']

    【讨论】:

    • 当然,但是因为他们已经在使用\W,所以我选择保留它。不过,我确实添加了一条注释。
    • a-zA-Z 仅适用于英文字符。更通用的方法是\p{L}。顺便说一句,为了减少混乱,您应该真正避免使用反斜杠。
    • 如何在上述模式中添加新行?
    【解决方案2】:

    对于基本的英文字符,使用

    words = Str.split("[^a-zA-Z0-9']+");
    

    如果您想包含带有特殊字符的英文单词(例如 fiancé)或使用非英文字符的语言,请使用

    words = Str.split("[^\\p{L}0-9']+");
    

    【讨论】:

    • 这不适用于字符串 = "      a    ";
    • 我的意思是“ ”字符串中的空格
    • @maroodb - 好吧,对于 split " "是一个字符串,而不是一个字符,尽管它在 HTML 输出中被转换为单个字符。在这种情况下,必须相应地调整正则表达式模式。有关此类实现的示例,请参阅ideone.com/3RbBj5。我希望这能解决您面临的问题。
    • 对不起,我没有正确解释我的意思; string = "{这里有空格} somedata"
    • @maroodb - 您需要调整正则表达式模式。如果你想用额外的字符串分割(比如onetwothree),那么模式需要在其中包含这样的字符串:Str.split("(one|two|three|[^a-zA-Z0-9'])+")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2017-09-22
    • 2022-12-08
    • 1970-01-01
    相关资源
    最近更新 更多