正则表达式在字段中的每个单词的开头找到大写字符

时间:2014-03-03 01:00:31

标签: regex

我创建了一个函数,它将一个字段与一个正则表达式进行比较,如果它与模式不匹配则返回0,如果匹配则返回1。我已经创建了类,所以我可以为模式匹配创建一个UDF。

function(expression,rexex) //If it matches it

本周末我一直在研究SQL服务器中的正则表达式,并且处于一个十字路口。

我基本上需要有以下模式,1次传递,0次失败。基本上我希望每个单词的第一个字母都大写:

the dog is bad - 0
The Dog Is Bad - 1

我很惭愧地说,我花了一整天才弄清楚如何识别每件作品的第一个字母,看看它是否是资本。

这是我到目前为止所拥有的。

[\p{Lu}\p{Lt}]

对于正确方向的任何帮助或推动都将不胜感激。

4 个答案:

答案 0 :(得分:0)

这仅假定字母,每个字只有一个空格:

^((?:\b[A-Z][a-z]*\b) {0,1})+$

Regular expression visualization

Debuggex Demo

自由间隔:

^              //Start of line
(              //(Capture)
   (?:         //(Non-capture)
       \b      //      Followed by word boundary
       [A-Z]   //      Followed by a capital letter
       [a-z]*  //      Followed by zero or more lowercase letters
       \b      //      Followed by word boundary
   ) {0,1}     //      Followed by either no space, or one space
)+             //   One or more times
$              //End of line

答案 1 :(得分:0)

您可以使用Negative Lookahead (?!)来验证行/句子:

/(?!.*?\b[a-z].*?\b)^.*?$/gm

这不会传递任何字符串或行,其中的单词以小写字母开头。

答案 2 :(得分:0)

比赛开始(^)后跟一个或多个大写字母组((...)+),后跟零个或多个单词字符([A-Z] )后跟一个或多个空格,或结尾(\w*)。

(\s+|$)

regex

答案 3 :(得分:0)

由于您似乎想要兼容unicode,我会这样做:

(?:^|\s+)(\p{lu}\p{Ll}*)