代码之家  ›  专栏  ›  技术社区  ›  Jeanne Lane

如何编写一个regex来捕获大写结束和大写开始的位置?

  •  0
  • Jeanne Lane  · 技术社区  · 6 年前

    我试过两种方法都能得到所有的帽子:

    [A-Z/:/s/~]*(^[A-Z]{1}[a-z]+) (^ to show not)
    [A-Z/:/s/~]*(?![A-Z]{1}[a-z]+)
    

    或者抓住这个案子:

    [A-Z]{1}[a-z]+ 
    
    [A-Z/:/s/~]*(^[A-Z]{1}[a-z]+) (^ to show not)
    

    例子:

    ELIMINATE:TWOS WORD AT THE END OF THIS BUT IGNORE~JUNK~ HELLOTwo Word
    

    我怎么能从这里面得到“两个字”

    3 回复  |  直到 5 年前
        1
  •  2
  •   QHarr    6 年前

    我已经给出了我的首选,所以这里有一个不同的选择,只使用+lookahead。

    [A-Z](?=[a-z])\w+
    

    正则表达式:

    regex

    Try it

        2
  •  2
  •   blhsing    6 年前

    (?<=[A-Z])([A-Z][a-z]+(?: [A-Z][a-z]+)*) 应该可以。

    演示: https://regex101.com/r/o7zwzG/1

        3
  •  0
  •   The fourth bird    6 年前

    不能匹配小写字符或换行符 [^a-z\n]+ 后跟匹配大写字符 [A-Z] .

    然后在组中捕获一个大写字符,后跟一个或多个小写字符 [A-Z][a-z]+ 之后是重复模式 (?: [A-Z][a-z]+)* 匹配一个空格和一个大写字符后跟一个或多个小写字符的。

    标题大小写值在组1中。

    [^a-z\n]+[A-Z]([A-Z][a-z]+(?: [A-Z][a-z]+)*)