连字符的条件语法

Conditional Syntax for Hyphen

提问人:Hank K 提问时间:11/17/2023 更新时间:11/17/2023 访问量:67

问:

目前有两个正则表达式,我想将它们合并为一个带有条件语法的表达式。连字符[\s]出现在某些文本字符串的开头,而其他文本字符串则不然

Find:   ([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])
Find:   - ([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])

Replc:  [\L$1\E $2]
Replc:  - [\L$1\E $2]


Before:
-------
- MAN [on radio]: The signal is breaking up.

MAN #2 [on radio]: Stay on him.


Results I'm looking for:
-------------------------
- [man on radio] The signal is breaking up.

[man #2 on radio] Stay on him.

https://regex101.com/r/AybQOl/3

每天都在学习一点点!!

正则表达式 记事本++

评论

0赞 Wiktor Stribiżew 11/17/2023
为什么要使用第二个替代品? 并替换为应该可以工作。\b([A-Z0-9 #]+)\h*\[([^][]+)\][^\w\s]*[\L$1\E $2]
0赞 Wiktor Stribiżew 11/19/2023
有什么对你有用吗?

答:

1赞 ikegami 11/17/2023 #1

由于比赛是无锚定的,您只需要

([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])

取代:

[\L$1\E $2]

这将处理这两种情况。


如果匹配是锚定的,则可以使用

找到:

^(- )?([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])

取代:

$1[\L$2\E $3]

评论

0赞 Hank K 11/17/2023
谢谢,猜你们都在同时打字......哈哈
0赞 ikegami 11/17/2023
@SmallPepperZ,不明白你的意思?
-1赞 smallpepperz 11/17/2023 #2

您可以使用运算符来表示正则表达式中的可选匹配项。如果要将其保留在输出中,则需要捕获可选组。在您的示例中,匹配正则表达式将从?

([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])

(- )?([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])

替换正则表达式将变为

$1[\L$2\E $3]
-1赞 Reilas 11/17/2023 #3

请尝试以下捕获模式

(?m)^(- )?(.+?)\[(.+?]):
$1\L[$2\E$3

输出

- [man on radio] The signal is breaking up.

[man #2 on radio] Stay on him.

评论

0赞 ikegami 11/17/2023
那个 OP 说他们想匹配.你为什么要改变它?([A-Z0-9 #]+) \[([A-Za-z0-9 .]+)\]([\S])