如何在标题案例中编写正则表达式
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 如果你想允许尾随空格,我可以修改我的模式。我以为你不会想要这个。以上是关于如何在标题案例中编写正则表达式的主要内容,如果未能解决你的问题,请参考以下文章