我正在尝试使用一些REST API和Java代码“玩”。
由于我主要使用德语,我已经设法让Apache HTTP客户端使用UTF-8编码,以确保“Umlaute”以正确的方式处理。
仍然我无法让我的正则表达式正确匹配我的文字。
我尝试从像..."type":"Büro_Licht"...
这样的字符串中找到像“Büro_Licht”这样的单词/单词组合。
使用正则表达式".*?type\":\"(\\w+).*?"
为我返回“B”,因为它不会将“ü”识别为单词字符。很明显,因为\ w被认为是[a-z A-Z 0-9]。在没有特殊字符的字符串中,我同时获得完整的“Office_Light”。
所以我试着在这里提到的另一个暗示几乎相同的问题(我无法评论,因为我缺乏声望点)。
使用正则表达式".*?type\":\"(\\p{L}).*?"
为我返回“Büro”。但是,由于我不理解的原因,它再次削减了unterscore。
是否有一种很好的方法可以将两个表达式组合起来以获得包含下划线和特殊字符的“完整”单词?
答案 0 :(得分:1)
如果你必须继续使用正则表达式,这不是解析JSON的好工具,请尝试\p{L}_
。在你的情况下,它将是:
String regex = ".*?type\":\"[\\p{L}_]+\"";
使用在线示例:https://regex101.com/r/57oFD5/2
\ p {L}匹配来自任何语言的任何类型的信件
_匹配字符_字面(区分大小写)
如果您需要支持其他语言,空格和各种其他UTF代码点,这将变得很忙。例如,您是否需要在:
周围支持随机数量的空格?看看this answer on removing emojis,有很多极端情况。