2012-05-31 32 views
1

我要寻找一个正则表达式,一个特定的字符串匹配,其中:正则表达式 - 查找特定字符串与至少一个大写字母

  1. 总是先从"fu:
  2. 总是"
  3. 结束在起点和终点之间至少包含一个大写字母

点3是我真正无法解决的部分。

"fu:(.*)?"所有字符串从点开相匹配的正则表达式3

[编辑] 其八九不离十现在,唯一的问题是之后的第二它不停止“ 基本上这个字符串:
”福:没有大写字母:,以大写字母”
是一个比赛,但不应该其他一些随机文本

+0

'[A-Z]'将匹配一个大写字母。 – Vikas

回答

0

喜欢的东西

^"fu:([^"]*?[A-Z][^"]*?)"$ 
+0

是啊,这很接近。它只是不会停止后结束“ – goTAN

+0

更新为使用^和$行分隔符 – duncan

+0

我不知道为什么,但^和$行分隔符不工作在崇高的text2搜索 – goTAN

1
^"fu:.*[A-Z].*"$ 

如果您想在多行文本中搜索,请不要忘记多行模式。

^"fu: - starts with "fu: 
.*  - any other characters 
[A-Z] - capital letter 
.*  - other characters 
"$  - " at the end 

很好的工具来测试它:http://www.regexplanet.com/advanced/java/index.html

+1

关于^和$的好处,但+不必要 – duncan

+0

为什么不能?“包含至少一个大写字母” - > [AZ] +或I 'm错误?:) – Alexander

+0

好吧,理解。+是多余的:)谢谢! – Alexander

3

,会为你工作的正则表达式是这样的:

/^"fu:.*?[A-Z].*?"$/ 

这里live demo of above regex

+0

这是一个匹配,但不应该:”fu:任何文本,但n大写字母“,但有一个大写字母我不在乎“ – goTAN

+0

这个问题是它只匹配A到Z范围内的大写字母。例如,Ruby代码'['”fu:Berlin“','fu:İstanbul'',' “fu:Washington”','fu:Örebro'','fu:Москва“']。 s.scan/^“fu:。*?[AZ]。*?”$ /}'返回'[[“\”fu:Berlin \“”],[],[“\”fu:Washington \“” ],[],[]]',尽管所有的字符串在理论上都包含大写字母。 –

+0

另外,你可以给一个字符串的例子:'/ ^“fu:。*?[AZ]。*?”$ /'可以匹配,但是'/^"fu:.*[AZ].*“ $ /'不能?谢谢! –

0

我一个问题评论与anubhava的解决方案(它只匹配从A到Z范围内的大写字母),但是后来我自己找到了解决方案。请注意,这需要支持Unicode的POSIX-compliant regular expression引擎。

我的解决办法是

/^"fu:.*[[:upper:]].*"$/ 

它解决了寻找其他语言的大写字母比英文的问题(有部分或完全不同的字母)。

在红宝石一个例子:

rx = /^"fu:.*[[:upper:]].*"$/ 
arr = ['"fu:Berlin"', '"fu:İstanbul"', '"fu:Washington"', '"fu:Örebro"', '"fu:Москва"'] 
arr.map {|s| s.scan rx} 

在这种情况下,所有的弦都匹配。

相关问题