我创建了这个正则表达式,它将在所有大写字母的前面添加一个下划线,除了第一个大写字母,如果它在字符串的开头
$string = preg_replace('/(?!^)[A-Z]/', '_$0', $string);
// Hello --> Hello
// HelloHello --> Hello_Hello
// aHelloHello --> a_Hello_Hello
// HELLO --> H_E_L_L_O
// hello --> hello
// HHEllo --> H_Hello
我希望正则表达式跳过字符串开头的所有连续大写字符:
// HHello --> HHello
// HEllO --> HEll_O
// aHEllo --> a_H_Ello
// HHHHHHHHHHellO --> HHHHHHHHHHell_O
简而言之:一个正则表达式,它在所有大写字母的前面添加一个下划线但忽略了字符串开头的所有连续大写字母。
答案 0 :(得分:1)
正则表达式:
^[A-Z]+(*SKIP)(*F)|[A-Z]
替换字符串:
_$0
如果你想在python中做同样的事情,那么你需要使用regex
模块,它允许量词在后面看,
>>> import regex
>>> m = regex.sub(r'(?<!^[A-Z]+|^)([A-Z])', r'_\1', 'HHHHHHHHHHHHHeLLO')
>>> m
'HHHHHHHHHHHHHe_L_L_O'
答案 1 :(得分:0)
我不确定我完全理解这个问题,但是如何:
$string = preg_replace('/([a-z])([A-Z])/', '$1_$2', $string);
答案 2 :(得分:0)
我认为这就是你想做的事情:
$string = preg_replace('/(?<=[a-z])[A-Z]/', '_$0', $string);