0

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

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”)<==全部大写

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

我需要一个可以两者兼得的正则表达式。谢谢!

4

2 回答 2

1

正则表达式无法识别英语。所以它没有介词和标点符号的概念。但是您可以定义一个正则表达式可以理解的规则。

像这样它应该匹配任意数量的大写字母和逗号,可以与N小写字符的数量组合。假设小写字符的数量将容纳所有介词。

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

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

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

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

于 2012-12-13T00:20:18.030 回答
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]+.

于 2012-12-13T00:20:41.547 回答