【问题标题】:Regular expression - finding specific string with at least one capital letter正则表达式 - 查找具有至少一个大写字母的特定字符串
【发布时间】:2012-06-05 12:34:42
【问题描述】:

我正在寻找一个匹配特定字符串的正则表达式:

  1. 始终以"fu: 开头
  2. 总是以"结尾
  3. 并且在这些起点和终点之间至少包含一个大写字母

第 3 点是我实在无法解决的部分。

正则表达式 "fu:(.*)?" 匹配除第 3 点之外的所有字符串。

[编辑] 现在已经很接近了,唯一的问题是它不会在第二个之后停止“。 基本上这个字符串:
"fu:没有大写字母:,其他一些带有大写字母的随机文本"
是匹配但不应该。

【问题讨论】:

  • [A-Z] 将匹配大写字母。

标签: regex


【解决方案1】:

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

我的解决办法是

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

它解决了在英语以外的其他语言(部分或完全不同的字母表)中查找大写字母的问题。

Ruby 中的一个例子:

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

在这种情况下,所有的字符串都匹配。

【讨论】:

    【解决方案2】:

    类似

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

    【讨论】:

    • 是的,非常接近。它只是在结束后不会停止”
    • 更新为使用 ^ 和 $ 行分隔符
    • 我不知道为什么,但是 ^ 和 $ 行分隔符在 sublime text2 搜索中不起作用。
    • 根据文档,他们应该这样做。尝试转义“(我已经更新了我的答案以匹配)
    • anubhava 得到了它,两个 .* 都需要 ?不要贪心
    【解决方案3】:

    适合你的正则表达式是这样的:

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

    这里是live demo of above regex

    【讨论】:

    • 这是一个匹配但不应该:“fu:any text but n capital letter”,但是有一个我不关心的大写字母“
    • 这个问题是它只匹配范围从A到Z的大写字母。例如,Ruby代码['"fu:Berlin"', '"fu:İstanbul"', '"fu:Washington"', '"fu:Örebro"', '"fu:Москва"'].map {|s| s.scan /^"fu:.*?[A-Z].*?"$/}返回[["\"fu:Berlin\""], [], ["\"fu:Washington\""], [], []],尽管理论上所有的字符串都包含大写字母。
    • 另外,您能否举一个/^"fu:.*?[A-Z].*?"$/ 可以匹配但/^"fu:.*[A-Z].*"$/ 不能匹配的字符串的示例?谢谢!
    • @goTAN: "fu:any text but n capital letter" 不匹配,如您在此处看到的:rubular.com/r/Q07Zkl3vRB 还想知道您使用什么语言/平台实现此正则表达式?您是否还需要支持英语以外的其他语言的大写字母?
    【解决方案4】:
    ^"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

    【讨论】:

    • 为什么不呢? “至少包含一个大写字母”-> [A-Z]+ 还是我弄错了? :)
    • 好的,明白了。 + 是不必要的 :) 谢谢!
    • hm 使用锚显然不起作用...我正在尝试使用崇高文本执行正则表达式搜索 2。这个正则表达式:“fu:.*[AZ].*”是完美的,只是它不会停止在第二个 " 之后,以下字符串不应匹配:"fu:any text but no capital letter",这里是一个大写字母 S
    • 我在这里看不到任何大写字母 S...根据我的测试,它不匹配。
    • 不应该匹配:"fu:any text but no capital letters", but there is one"
    猜你喜欢
    • 2016-12-14
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多