将所有文本更改为小写但省略以特定方式开始和结束的部分文本的正则表达式
Regex to change all text to lowercase but leave out parts of text that start and end in a specific way
除了以特定字母组合 ("ABC") 开头并以白色 space 结尾的单词(点、连字符、下划线可以在里面?
在 "ABCkjkJ.90_1 " 或 "ABC-12_OLL " 之类的词中保留大写,但将其他所有小写?
查找:
(我不知道)
[^ABC][\s]$
替换为:
\L
此外,我应该如何删除其余文本中的所有标点符号(不是以 ABC 开头的标点符号)?
问题归结为匹配不以 ABC
开头的单词。因为字符串中的单词可以包含点和连字符,它们不是单词字符,所以我们不能使用 \b
来确定单词的开头,不幸的是 - 相反,match 前面的 space (或字符串的开头)和
(?: |^)
然后对 abc
进行负向预测,并匹配尽可能多的单词、点或连字符:
(?: |^)(?!abc)[\w.-]*
然后,将每个完整匹配小写。
https://regex101.com/r/QSShDu/1
例如,输入:
Baz Buzz ABCkjkJ.90_1 ABC-12_OLL Foo Bar
你得到
baz buzz ABCkjkJ.90_1 ABC-12_OLL foo bar
如果ABC
部分总是出现在字符串的开头,那么就容易多了——只需要捕获一组中的第一个单词,然后捕获一组中字符串的其余部分,并大写字符串的其余部分:
([\w.-]*)(.+)
替换为
\L
除了以特定字母组合 ("ABC") 开头并以白色 space 结尾的单词(点、连字符、下划线可以在里面? 在 "ABCkjkJ.90_1 " 或 "ABC-12_OLL " 之类的词中保留大写,但将其他所有小写?
查找:
(我不知道)
[^ABC][\s]$
替换为:
\L
此外,我应该如何删除其余文本中的所有标点符号(不是以 ABC 开头的标点符号)?
问题归结为匹配不以 ABC
开头的单词。因为字符串中的单词可以包含点和连字符,它们不是单词字符,所以我们不能使用 \b
来确定单词的开头,不幸的是 - 相反,match 前面的 space (或字符串的开头)和
(?: |^)
然后对 abc
进行负向预测,并匹配尽可能多的单词、点或连字符:
(?: |^)(?!abc)[\w.-]*
然后,将每个完整匹配小写。
https://regex101.com/r/QSShDu/1
例如,输入:
Baz Buzz ABCkjkJ.90_1 ABC-12_OLL Foo Bar
你得到
baz buzz ABCkjkJ.90_1 ABC-12_OLL foo bar
如果ABC
部分总是出现在字符串的开头,那么就容易多了——只需要捕获一组中的第一个单词,然后捕获一组中字符串的其余部分,并大写字符串的其余部分:
([\w.-]*)(.+)
替换为
\L