【问题标题】:How do I use regex to replace continuous UPPER case to lower case? (But not replace the single upper characters)如何使用正则表达式将连续的大写字母替换为小写字母? (但不能替换单个大写字符)
【发布时间】:2019-04-06 07:44:44
【问题描述】:

文本示例,

我们不会让这些大篷车,它们也是由一些非常 坏暴徒和帮派成员,进入美国我们的边界是神圣的,必须 合法入境。

我想将NOT 替换为not。但不要替换We, Caravans, U.S. Our Border

我找到了这个Regex replace uppercase with lowercase letters

Find: (\w) Replace With: \L$1

这会替换所有大写字母。

PS:我这样做的原因是我使用 TTS 来产生声音。 NOT 将发音为 N.O.T。我只是希望它被读为not。我不想更换太多东西。因为读者会看到文字,所以保持原创会很好。

【问题讨论】:

  • 发布您的尝试。
  • @AvinashRaj,我的理由?

标签: regex


【解决方案1】:

我想我会选择这个:

(\b[A-Z]{2,}\b)

\b 是单词边界,[A-Z] 只是大写字母,{2,} 是两个或多个。

https://regex101.com/r/qHmE1V/1

而你的替换 \L$1

【讨论】:

    【解决方案2】:

    就在您发布的问题Regex replace uppercase with lowercase letters

    第二个答案可以解决你的问题

    找到:

    ([A-Z]){2,n}
    

    替换:

    \L$1
    

    【讨论】:

      【解决方案3】:

      因为\L 在捕获组将其转换为小写之前,无论您的环境如何,听起来您需要做的就是找到两个或多个大写字符的出现:匹配

      ([A-Z]{2,})
      

      替换为

      \L$1
      

      如果您只想替换完整的单词,那么还要添加单词边界:

      (\b[A-Z]{2,}\b)
      

      (您可以省略捕获组并使用$& 而不是$1

      【讨论】:

        猜你喜欢
        • 2011-03-15
        • 1970-01-01
        • 2011-01-16
        • 2011-05-07
        • 1970-01-01
        • 2014-06-20
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        相关资源
        最近更新 更多