如何在标题案例中编写正则表达式

Posted

技术标签:

【中文标题】如何在标题案例中编写正则表达式【英文标题】:How to write a regex in title case 【发布时间】:2019-02-18 14:31:33 【问题描述】:

我正在使用一个名为 Information Steward 的 SAP 应用程序,并创建了一个规则,其中名称必须是标题大小写(即每个单词都大写)。

我制定了以下规则:

BEGIN

IF(match_regex($name, '(^(\b[A-Z]\w*\s*)+$)', null)) RETURN TRUE;

ELSE RETURN FALSE;

END

虽然它是成功的,但它似乎接受了应该被标识为“FALSE”的输入。请参阅随附的屏幕截图。

'Test Name' 和 'TEST NAME' 应该是 FALSE,而是在这个正则表达式下传递。

任何有关正则表达式的帮助/指导都会非常有用。

【问题讨论】:

\w 匹配这两种情况。将其更改为[a-z] ^[A-Z][a-z]*(\s+[A-Z][a-z]*)*$ (demo) 应该可以。 @Wiktor Stribizew 成功了!非常感谢 - 它就像一个魅力 名字中可以有数字吗?还是下划线? @WiktorStribiżew 我猜在我的场景中是的 - 数字和下划线都可以存在。那么正则表达式会变成这样:^[A-Z][a-z0-9_\-]*(\s+[A-Z][a-z0-9_\-]*)*$ 【参考方案1】:

(^(\b[A-Z]\w*\s*)+$) 正则表达式呈现一个匹配完全匹配字符串的模式:

^ - 字符串开头 (\b[A-Z]\w*\s*)+ - 1 次或多次出现(由于 (...)+\b - 单词边界 [A-Z] - 一个大写的 ASCII 字母 \w* - 0 个或多个字母/数字/下划线 \s* - 0+ 个空格 $ - 字符串结束。

如您所见,它允许尾随空格,并且 \w 匹配 [A-Za-z0-9_] 匹配的内容,即它同时匹配大小写字母。

您只想在初始大写字母之后匹配小写字母,同时允许 -_ 字符。你可以使用

^[A-Z][a-z0-9_-]*(\s+[A-Z][a-z0-9_-]*)*$

请参阅regex demo。

详情

^ - 字符串锚的开始 [A-Z][a-z0-9_-]* - 一个大写字母,后跟 0+ 个小写字母、数字、_- 字符 (\s+[A-Z][a-z0-9_-]*)* - 零次或多次出现: \s+ - 1 个或多个空格 [A-Z][a-z0-9_-]* - 一个大写字母,后跟 0+ 个小写字母、数字、_- 字符 $ - 字符串结束。

【讨论】:

【参考方案2】:

我会把你的正则表达式写成:

^[A-Z]\w*(?:\s+[A-Z]\w*)*$

这表示匹配一个以大写字母开头的单词,然后是一个或多个空格和另一个以大写字母开头的单词,这个数量是零次或多次。

我将匹配的单词表述为以[A-Z] 开头,后跟\w*,表示零个或多个单词字符。这样可以匹配 A 之类的内容。

Demo

编辑:

基于上面的 cmets,如果您想要其他字符类来表示初始大写字母之后的内容,那么请改为:

^[A-Z][something]*(?:\s+[A-Z][something]*)*$

[something] 是你的角色类。

【讨论】:

非常感谢您的快速回复。这更有意义。但是当我将规则应用于我的测试变量时,它仍然显示相同的结果。可能只是我正在使用的软件吗? @Z.K.I ^[A-Z]\w*(?:\s+[A-Z]\w*)*$ 与您的模式基本相同,但不允许尾随空格。 @Z.K.I 如果你想允许尾随空格,我可以修改我的模式。我以为你不会想要这个。

以上是关于如何在标题案例中编写正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫解析神器-正则表达式如何正确运用?案例详解

Python爬虫解析神器-正则表达式如何正确运用?案例详解

匹配骆驼和帕斯卡案例的正则表达式

打字稿:如何在 2 行中编写长正则表达式 [重复]

如何在正则表达式中编写可选单词?

如何在Objective C(NSRegularExpression)中编写正则表达式?