【问题标题】:Append a dot before each Capital letter and then lowercase the word在每个大写字母前添加一个点,然后将单词小写
【发布时间】:2016-11-14 09:18:50
【问题描述】:

我对正则表达式很陌生,因此我决定寻求帮助。

情况如下:我必须将文本从 [az][AZ][0-9] 格式转换为 [az][0-9][.] 格式,在每个大写字母或字母数字字符之前(除非单词是字母/数字在前)应该放置一个点.,然后将整个单词小写。

以下是替换模式的示例:

从这个IAmHuman到这个i.am.human

从这个HelloGuys2到这个hello.guys.2

从这个isthereany1heRe到这个isthereany.1he.re

我帮你搞定!

【问题讨论】:

  • 你确定isthereany.1.he.R.eR 在结果中不应该更低吗?
  • 谢谢@Wiktor Stribiżew,你是对的。我已经编辑了我的原始帖子:)
  • 你必须照顾unicode字母吗?
  • 为什么isthereany.1.he.r.e中最后一个e之前的点?
  • @enrico.bacis - 不需要谢谢!

标签: regex sublimetext2 sublimetext3


【解决方案1】:

我可以建议一个两步法:

查找(?<!\S)[[:upper:][:digit:]]
替换\l$0

如果在大写字母 ([:upper:]) 或数字 ([:digit:]) 之前有非空格,则 (?<!\S) 匹配失败,然后

查找(?<=\S)[[:upper:][:digit:]]
替换.\l$0

其中(?<=\S) 要求在大写字母或数字前有一个非空格。

替换是不同的,所以我们需要 2 个步骤。 $0 指的是整个匹配,\l 将匹配的字符变为小写。

你可以用[A-Z]代替[:upper:],也可以用\d代替\d

结果:

【讨论】:

  • 点呢?在您的评论中,我看到了此处未显示的第二个表达式。
  • 对不起,我忘了修改第二个替换模式。已更新。
  • 解释得很好:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多