Regex:仅当字符串以字符结尾时查找字符串

cclgggtu  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(206)

我正在尝试在Notepad++中执行正则表达式替换。Regex不是我的强项,但我以为我已经弄明白了。我尝试匹配逗号后面跟任意数量的空格,但仅当行以“{”结尾时。我想用“,\r\n”(逗号后面跟着一个新行)替换这些逗号和后面的任何空格。
目的是将多选择器组中的每个选择器放在新的行上,以使其更容易阅读。下面是一个例子:

.messageBox label, .messageBox a, .messageBox li {
        font-size: 0.8em;
        font-family: "Segoe UI",Arial,sans-serif;
}

应该成为

.messageBox label,
.messageBox a,
.messageBox li {
        font-size: 0.8em;
        font-family: "Segoe UI",Arial,sans-serif;
}

请注意选择器行的逗号是如何被替换为,\r\n的,但字体系列样式却没有。这就是寻找以“{”结尾的行的目的。
这是我目前使用的正则表达式:

(, *)(?=.*\{$)

这在regexr编辑器中看起来像预期的那样工作。它查找选择器行中的逗号,但不查找字体系列行中的逗号。但是,notepad可以在两者中找到逗号。我做错了什么?我已经在Notepad中选中了“matches newline”复选框,这应该会启用/m(多行)标志。

k97glaaz

k97glaaz1#

尝试使用(?<=,)\s+(?=.*{$),并仅使用\r\n作为替代。我用Notepad++ v8.4.8测试了它,它工作起来很有魅力。
勾选“环绕”复选框以获得与当前光标位置无关的结果(否则仅在光标位置被替换后匹配)。确保选择“正则表达式”搜索模式。
正则表达式的意思是:
搜索一个或多个空格(\s+),这些空格以逗号((?<=,))为前缀,后跟任意数量的任意字符、左大括号和行尾((?=.*{$))。使用这个表达式,匹配的只是空格,所以不需要反向引用匹配的任何部分。

相关问题