什么正则表达式可用于进行以下转换?
City -> CITY
FirstName -> FIRST_NAME
DOB -> DOB
PATId -> PAT_ID
RoomNO -> ROOM_NO
以下几乎可以使用-只是在单词的开头添加了一个下划线:
var rgx = @"(?x)( [A-Z][a-z,0-9]+ | [A-Z]+(?![a-z]) )";
var tests = new string[] { "City",
"FirstName",
"DOB",
"PATId",
"RoomNO"};
foreach (var test in tests)
Console.WriteLine("{0} -> {1}", test,
Regex.Replace(test, rgx, "_$0").ToUpper());
// output:
// City -> _CITY
// FirstName -> _FIRST_NAME
// DOB -> _DOB
// PATId -> _PAT_ID
// RoomNO -> _ROOM_NO
最佳答案
从约翰·M·甘特(John M Gant)添加下划线然后大写的想法开始,我认为这个正则表达式应该起作用:
([A-Z])([A-Z][a-z])|([a-z0-9])([A-Z])
替换为:
$1$3_$2$4
您可以重命名捕获区域,以使替换字符串更易于阅读。只有$ 1或$ 3才有值,与$ 2和$ 4相同。一般想法是在以下情况下添加下划线:
希望这可以帮助。
关于c# - 正则表达式:将驼峰式大小写转换为带有下划线的所有大写字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4511087/