【问题标题】:regex match uppercase words and replace to capitalize正则表达式匹配大写单词并替换为大写
【发布时间】:2014-09-09 07:23:13
【问题描述】:

例如: “如何连接串行 ATA 硬盘 HP 3D 驱动器”

我想用 ruby​​ 中的正则表达式将“ATA”替换为“Ata”,但不包括“3D”。主要是英文单词。

另一个例子: "CD/DVD STORAGE WALLET-80 PCS Nylon" => "CD/DVD Storage Wallet-80 Pcs Nylon"

D-Link DGS-1005G 6 端口正确资源 => D-Link Dgs-1005G 6 端口正确资源

HP85 C9429A OEM PUT RETURN BETWEEN => HP85 C9429A OEM Put Returns between

FOREXAMPLE INDENT76 469-FUNCTIONS,10x2 链接 => 例如 Indent76 469-Functions,10x2 链接

谢谢!

【问题讨论】:

  • 这不是双向转换。您可以将所有内容都大写,但很难反转它。我想没有算法可以可靠地做到这一点。边缘情况太多。
  • 如何区分包含数字的事物?其中哪个要小写?例如,您要小写 INDENT766PORT,但不是 1005GHP85C9429A - 为什么?
  • 我觉得是个牌子——常用的缩写,所以不会小写,反正我会加个使用编程语言的列表略过。具有 3 个及以上字符的数字将是小写的。我想我需要一个正则表达式来检查 2 个或以上的单词是大写单词,我将使用编程语言大写。

标签: ruby regex match uppercase


【解决方案1】:

您必须定义您认为是断字字符的标点符号。例如,我可以从您的示例中推断出您不想​​在/ 上断词(因为CD/DVD),但您确实想在- 上断词(因为WALLET-80)。

这样的正则表达式是:

(?<=$|[-\s])\p{Lu}+(?=$|[-\s])

演示:http://regex101.com/r/nS7xB0/1

将您自己的断字字符添加到[-\s] 括号中。


编辑:好的,根据您的反馈,这是另一个正则表达式:

\b(?=(?:\w*?\p{Lu}){3})\w+\b

这将匹配包含至少 3 个大写字母的任何字母/数字组合。

演示:http://regex101.com/r/nS7xB0/2

【讨论】:

  • 其实断词不是主要的,有时候词之间没有断词。我只想找出除日常大写缩写和大写数字以外的大写单词。
  • 好吧,那么你需要提供一个你想跳过的缩写列表。不断字是什么意思?请编辑您的问题以提供更多示例。
  • 谢谢,已更新。对于缩写,我将添加一个要跳过的数组。
猜你喜欢
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多