【问题标题】:Java regex not matching german "Umlaute" OR underscoreJava 正则表达式不匹配德语“元音变音”或下划线
【发布时间】:2018-03-29 12:11:41
【问题描述】:

我正在尝试使用一些 REST API 和 java 代码“玩转”。

由于我主要使用德语,我已经设法让 Apache HTTP 客户端使用 UTF-8 编码,以确保以正确的方式处理“元音变音”。

我仍然无法让我的正则表达式正确匹配我的话。

我尝试从..."type":"Büro_Licht"... 这样的字符串中找到像“Büro_Licht”这样的单词/单词组合。

使用正则表达式 ".*?type\":\"(\\w+).*?" 为我返回“B”,因为它无法将“ü”识别为单词字符。显然,因为 \w 被称为 [a-z A-Z 0-9]。在没有特殊字符的字符串中,我同时得到完整的“Office_Light”。

所以我尝试了这里提到的另一个提示,就像几乎相同的问题(我无法评论,因为我缺乏声誉点)。

使用正则表达式".*?type\":\"(\\p{L}).*?" 为我返回“Büro”。但是这里又一次因为我不明白的原因而削减了下划线。

有没有一种很好的方法可以结合这两个表达式来获得包含下划线特殊字符的“完整”单词?

【问题讨论】:

  • 这里只是一个评论,如果您尝试使用正则表达式解析 JSON,请不要。使用 JSON 解析器。
  • 我首先尝试了 JSON,但在我看来,使用 HTTP 客户端处理 REST 请求更容易,就像纯文本和通过 URL 的 put/get 命令一样。为此,我为自己构建了一些方便的方法来处理纯文本,而正则表达式是其中的一部分;)
  • 您正在构建自己的填充单元格,也就是说。相信我。
  • 为什么不直接捕获任何字符,直到下一个"? (即.*?type\":\"(.+?)(?<!\\)\",但是,无论如何不要用正则表达式解析 json)
  • 值得一试。似乎是合法的^^

标签: java regex


【解决方案1】:

如果您必须继续使用正则表达式,它不是解析 JSON 的好工具,请尝试 \p{L}_。在您的情况下,它将是:

String regex = ".*?type\":\"[\\p{L}_]+\"";

以在线为例:https://regex101.com/r/57oFD5/2

\p{L} 匹配来自任何语言的任何类型的字母

_ 匹配字符 _ 字面意思(区分大小写)

如果您需要支持其他语言、空格和各种其他 UTF 代码点,这将变得很忙。例如,您是否需要支持: 周围的随机空格数?看看this answer on removing emojis,有很多极端案例。

【讨论】:

  • 感谢提示。我尝试了(更新的)代码,但由于某种原因,我的脚本现在挂起。也许出于其他原因,也许不是……我会发现的;)
猜你喜欢
  • 2020-03-23
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
相关资源
最近更新 更多