我正在尝试获取一个字符串,以便在字符串中的大小写更改时使用下划线'_',以使用户更清楚。例如,如果我们有一个String'个人ID号码',我想把它变成'personal_ID_number'。这是在C#。
谢谢,我感谢任何帮助,建议。
-SID
答案 0 :(得分:5)
替换案例更改
你正在寻找这个(我删除了ID之前的空格,假设它是一个错字)
(?:(?<=[a-z])(?=[A-Z]))|(?:(?<=[A-Z])(?=[a-z]))
它会将personalIDnumber
转换为personal_ID_number
Lookbehind((?<=[a-z])
)和lookahead((?=[A-Z])
)构造匹配小写字母和大写字母之间的空字符串(或者在管道{{之后的第二部分中相反的方向) 1}})并用下划线替换它。
使用可选空格替换案例更改
如果要在替换中包含空格,只需将其包含在外观
|
它会将(?:(?<=[a-z])\s*(?=[A-Z]))|(?:(?<=[A-Z])\s*(?=[a-z]))
转换为personal IDnumber
请参阅此here on Regexr
替换案例更改,但每个字都以大写开头 如果你说每个单词都以大写字母开头,那么你可以这样做
personal_ID_number
这将来自
PersonalIDNumber
JustAnotherTest
OtherWordWithID
SomeMORETest
此
Personal_ID_Number
Just_Another_Test
Other_Word_With_ID
Some_MORE_Test
请参阅此here on Regexr
答案 1 :(得分:0)
非正则表达式解决方案(以防万一)
string str = "personalIDnumber";
var result =
Enumerable.Range(0, str.Length - 1)
.Where(i => char.IsUpper(str[i]) != char.IsUpper(str[i + 1]))
.ToList();
string resultString = result.Aggregate(str, (current, i) => current.Insert(i + 1 + result.IndexOf(i), "_"));
result
存储了必须插入_
并且Aggregate()
函数插入的位置列表。