我想知道是否有一种方法可以使用正则表达式来大写文件名开头的所有字母,直到找到的第一个破折号。
之前:Apple -橙子- Banana - Filename.txt Grape - Orange - Banana - Filename.txt
After:APPLE -橙子- Banana - Filename.txt GRAPE - Orange - Banana - Filename.txt
如果可能的话,以防万一,如果有人也可以提供正则表达式,以资本化到第二个破折号发现,所以它将实现以下....
APPLE -橙子- Banana - Filename.txt GRAPE - ORANGE - Banana - Filename.txt
如果需要的话,这也会很有帮助,让我可以理解正则表达式正在做什么。任何分解和解释每一块是做什么将是非常赞赏。
我正在使用一个程序,允许用户重命名文件,在那里它给出了两个字段。第一个字段是要查找的内容,第二个字段是您希望用什么方法替换它。如果这是有意义的,如果有人能为这两个字段提供正则表达式,那就太好了。
正则表达式是我认为我理解的事情之一。直到我必须创建另一个:)
谢谢你提供的任何帮助
1条答案
按热度按时间s2j5cfk01#
我的建议是否有效完全取决于regex在你使用的程序中是如何实现的。如果它使用javascript正则表达式引擎,它将无法工作。如果它使用PHP正则表达式引擎,它将工作。如果你的程序不支持大小写修饰符(\U,\L),那么这将是不可能的。
正则表达式:
(.*?)(-.*)
replace-string:
\U$1\E$2
regex101-link。
大写直到第二个破折号:
正则表达式:
(.*?-.*?)(-.*)
replace-string:
\U$1\E$2
regex101-link。
说明
也看看链接。Regex 101有非常好的解释,也有视觉上的支持。
.
匹配除换行符以外的任何字符(...)
创建一个组(稍后可以在replace-string中引用)*
匹配前一个标记0-无限次。-
恰好匹配一个破折号。*?
确保了一种惰性匹配策略。这意味着引擎会尽可能少地匹配。这就是为什么我们只得到第一个单词,直到第一个出现的破折号。\U
开始将后面所有字符转换为大写。\E
结束铸造$1
插入匹配的第一个组。