【问题标题】:regex matching yelling words and emojis in a string正则表达式匹配字符串中的喊叫词和表情符号
【发布时间】:2016-04-16 22:11:25
【问题描述】:

我有以下正则表达式用于匹配所有字母大写的短语

private static String ALL_CAPS_REGEXP = "\\b[A-Z\\s]+\\b";

但这与;D:P:O 等字符串不匹配。

举几个例子:

  • ALL CAPS :DD REGEXP
  • ALL CAPS ('-:
  • ALL CAPS )-': :P
  • I ALL CAPS REGEXP

我想匹配。这就像忽略任何不是字母但其余字符应为大写的字符

假设任何表情符号中使用的字母都是大写的。

我应该对正则表达式进行哪些更改以匹配具有大写字符的字符串之类的表情符号?

【问题讨论】:

  • 这个适用于那些表情符号。
  • 你说“匹配一个单词”,但正则表达式是[A-Z\s]+,它匹配字母和空格,即匹配多个单词,而不是单个单词。示例:I said GO HOME 将匹配 IGO HOME,而不是 IGOHOME
  • @Andreas 你说得对。我编辑了问题的那一部分。
  • 是单字母大写单词,例如I,算不算大喊大叫?
  • 定义“表情符号”。任何可能被视为表情符号的东西,因此是公认的表情符号的特定列表,例如如Wikipedia? 中所列

标签: java regex


【解决方案1】:

对于一个正则表达式“匹配带有大写字符的类似表情符号的字符串”,我们需要声明“类似表情符号的字符串”的含义。

由于表情符号使用(组合)各种标点符号,并且您限制使用大写字母的表情符号,您可以声明标点符号和可选大写字母的任何组合都是表情符号。

在这种情况下,只需列出字符类中的标点符号即可。

"\\b[A-Z\\s!@#$%^&*()\\_-+={}[\\]:;\"'<>?,./]+\\b"

或者使用POSIX character classes 可能更具描述性:

"\\b[\\p{Upper}\\p{Space}\\p{Punct}]+\\b"

可能以 (?U) 为前缀以获得完整的 unicode/国际支持。

您可能还想过滤掉单字符匹配项,否则像"I rock." 这样的输入将返回I.,因此请使用{2,} 而不是+

"(?U)\\b[\\p{Upper}\\p{Space}\\p{Punct}]{2,}\\b"

【讨论】:

  • 我刚刚注意到\\b[\\p{Upper}\\p{Space}\\p{Punct}]+\\b 也匹配http://url_removed!!??
  • @AnimeshPandey 无法匹配小写字母,所以我不确定您在说什么。
猜你喜欢
  • 2012-07-19
  • 1970-01-01
  • 2013-01-09
  • 2021-05-23
  • 1970-01-01
  • 2012-06-05
  • 2013-12-25
相关资源
最近更新 更多