如何解决使用正则表达式复制选择并替换一些字符
我正在尝试采取以下措施:
Joe Dane
Bob Sagget
Whitney Houston
Some
Other
Test
并尝试制作:
JOE_DANE("Joe Dane"),BOB_SAGGET("Bob Sagget"),WHITNEY_HOUSTON("Whitney Houston"),SOME("Some"),OTHER("Other"),TEST("Test"),
我正在使用 Notepad++ 并且我很接近,但在正则表达式方面还不够好,无法找出剩余的表达式。到目前为止,这就是我所拥有的:
查找内容:(^.*)
替换为:\1 \(\"\1\"\),
产生:Joe Dane("Joe Dane"),
我试过替换为:\U$1 \(\"\1\"\),
但这也会影响 \1
的第二个实例(大写)。它也不会将空格替换为下划线 _
。
解决方法
这可以一步完成。
如果一行中的单词不超过 2 个:
- Ctrl+H
- 查找内容:
^(\S+)(?: (\S+))?$
- 替换为:
\U$1(?2_$2)\E\("$0"\),
- 检查 环绕
- 检查 正则表达式
- 全部替换
说明:
^ # beginning of line
(\S+) # group 1,1 or more non space
(?: (\S+))? # non capture group,a space,group 2,1 or more non space,optional
$
替换:
\U # uppercased
$1 # group 1
(?2_$2) # if group 2 exists,add and underscore before
\E # end uppercase
\("$0"\),# the whole match with parens and quote
屏幕截图(之后):
如果您有 2 个以上的单词(最多 5 个),请使用:
-
找到
^(\S+)(?: (\S+))?(?: (\S+))?(?: (\S+))?(?: (\S+))?
-
替换:
\U$1(?2_$2)(?3_$3)(?4_$4)(?5_$5)\E\("$0"\),
我有五个以上的词,请根据需要添加(?: (\S+))?
。
您可以分两步完成,首先从字符串的开头匹配任意字符 1 次以上。
查找内容
^.+
对于第一次替换,您可以使用 \E
结束 \U
的激活并使用完整匹配 $0
替换为
\U$0\E\("$0"\),
对于第二步,要用下划线替换空格,您可以跳过括号之间的文本,并匹配大写字符之间的空格。
查找内容
\(".*?"\)(*SKIP)(*F)|[A-Z]+\K\h+(?=[A-Z])
-
\(".*?"\)
匹配从("
到")
-
(*SKIP)(*F)|
跳过这部分比赛 -
[A-Z]+\K
匹配大写字符并使用\K
清除当前匹配缓冲区(忘记什么是matches do far) -
\h+(?=[A-Z])
匹配 1+ 个水平空白字符并在右侧断言一个大写字符
替换为 _
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。