正则表达式匹配大写短语,其中一些大写短语之间有小写单词

时间:2012-12-13 00:13:47

标签: regex

我如何匹配(使用一个正则表达式)大写短语,其中一些短语中包含小写单词?例如:

1)。 “接下来的几个月是休闲的6月,7月和8月,而其他所有人都没有。”

my match should be: "UPPERCASEWORD1, UPPERCASEWORD2, lowercaseword, UPPERCASEWORD3" (i.e.**JUNE, JULY, and AUGUST**) <=== uppercase words with lowercase in between 

2)“办公室星期六休息,星期一,谢谢。”

我的比赛应该是“星期六到星期一”(即“UPPERCASEWORD1 UPPERCASEWORD2 UPPERCASEWORD3”)&lt; ==全部大写

简单来说,我正在寻找一个匹配一个以大写单词开头和结尾的短语的正则表达式,但也可能在中间有小写单词。

我需要一个可以同时执行这两个操作的正则表达式。 谢谢!

2 个答案:

答案 0 :(得分:1)

正则表达式不识别英语。所以它不介意介词和标点符号。你可以做的是定义一个可以被正则表达式理解的规则。

喜欢这个它应该匹配任意数量的大写字母和逗号,可以与N个小写字符组合。假设小写字符数将包含所有介词。

([A-Z]+[\sa-z,]{0,N})+[A-Z]+

另一种方法是,如果你有一个介词列表,你可以在正则表达式中使用它。

([A-Z]+((in|out|or|by|with|and)*[\s,]*)+)+[A-Z]+

但是这个列表并不可靠,因为你不知道哪个词会作为介词。在英语中,任何单词都可以作为预设。这取决于它的使用地点。

答案 1 :(得分:0)

/(\b[A-Z]+\b[-,\s]+((and|or|is|on|at|to)\s+)*)*\b[A-Z]+\b/g
             ^^^^   ^^^^^^^^^^^^^^^^^^^^
              |              |
 list of delimiters    list of prepositions
例如,

将匹配它们。请注意,您的要求非常模糊,但您可以使用[a-z]+等常规匹配轻松替换介词列表。