【问题标题】:Regular expression for unicode in java Dash versionjava Dash版本中unicode的正则表达式
【发布时间】:2021-07-01 15:17:21
【问题描述】:

可以通过正则表达式来提高下面的性能,代码是函数式的,但是我想知道有没有办法选择unicode中可能存在的破折号来标准化我的破折号

单词:

48553−FS002
48553-FS002
48553 FS002
48553-FS002-ESD12

Java

String reference = "48553−FS002";
String separador = reference.replaceFirst ( "\\w+(\\W)?\\w+", "$1" );
if(!separator.equals ( " " )) {
   reference = reference.replaceAll ( separator, "-" );
}

或者您可以搜索 unicode 代码,我正在阅读以下内容:dash,但我没有设法使其工作Java Regex Unicode

【问题讨论】:

  • 破折号正则表达式是\p{Pd}。加上一个软连字符,它是[\p{Pd}\u00AD]
  • @WiktorStribiżew 我尝试但在所有情况下都没有找到,例如48553−FS002,但其他人找到了
  • 啊,那个是减号,\u2212,加吧。 [\p{Pd}\u00AD\u2212]
  • @WiktorStribiżew 谢谢,我刚刚找到它,甚至一千和一千谢谢,它是一样的。 \u2212

标签: java regex unicode


【解决方案1】:

如果你知道你的字符串只包含单词字符和分隔符,看起来就是这样,那么你可以使用

reference = reference.replaceAll("[^ \\w]", "-");

【讨论】:

  • \W 模式当前在 OP 代码中使用。
  • 是的,如果字符串的格式如图所示,这可能是最好的方法。
  • 为什么?没有任何前瞻,"[^\\w ]" 会更容易。顺便说一句,我已经将它添加到我的答案中。
  • @WiktorStribiżew 很高兴看到你复制我的方法。
  • 你更新了你的答案之后我这样做了。从字面上看 2 秒后。
【解决方案2】:

如果你需要匹配除空格以外的任何非单词,你可以使用

reference = reference.replaceAll("[^\\w ]", "-");

或者,用字符类减法:

reference = reference.replaceAll("[\\W&&[^ ]]", "-");

您可以使用以下模式来匹配连字符或破折号之类的模式:

[\p{Pd}\u00AD\u2212]

这里,

  • \p{Pd} - 匹配任何 Punctuation, Dash 符号
  • \u00AD - 匹配软连字符
  • \u2212 - 匹配减号。

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 2023-02-21
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2013-04-07
    相关资源
    最近更新 更多