提问人:Hank K 提问时间:11/17/2023 更新时间:11/17/2023 访问量:67
连字符的条件语法
Conditional Syntax for Hyphen
问:
目前有两个正则表达式,我想将它们合并为一个带有条件语法的表达式。连字符[\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
每天都在学习一点点!!
答:
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])
评论
\b([A-Z0-9 #]+)\h*\[([^][]+)\][^\w\s]*
[\L$1\E $2]