如何用下划线和C#中的字母替换每个UpperCase字母? 注意:除非该字符已由下划线继续。
更新
例如,
MikeJones
将变成
Mike_Jones
但Mike_Jones
不会变成
Mike__Jones
Regex是最好的方法吗?我从哪里开始这个?
答案 0 :(得分:29)
正则表达式听起来最好:
string input = "Test_StringForYou";
string replaced = Regex.Replace(input, @"(?<!_)([A-Z])", "_$1");
Console.WriteLine(replaced);
输出:_Test_String_For_You
请务必添加using System.Text.RegularExpressions;
答案 1 :(得分:2)
所以你不想要改变字母的大小写!我知道你没有说你做过,但我们有些人认为这是因为这个问题经常出现。在这种情况下,这个正则表达式就是你所需要的:
s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");
为小写字母执行正向lookbehind还可确保您不在字符串的开头添加下划线。
答案 2 :(得分:1)
Regex.Replace(subject, "([A-Z])", "_$1");
将Quick Brown Fox改为_the_ Quick Brown Fox
这就是你需要的吗?
答案 3 :(得分:0)
如果你想改变它:
示例文字
向
_sample _text
然后不,RegEx不会严格执行此操作,因为您无法转换替换表达式中的捕获或组。当然,您可以使用Jake的答案并在末尾添加.ToLower()
调用,这将用小写字母替换所有大写字母。
如果您要做的只是在每个没有大写字母的大写字母前面加下一个下划线,那么Jake的答案应该可以解决问题。
答案 4 :(得分:0)
using System.Text.RegularExpressions;
//-----------------------------------------------------------------
string str = Regex.Replace("MyString", @"([A-Z])", " $1").Trim();
//-----------------------------------------------------------------
str givs "My String"
它运作良好
答案 5 :(得分:0)
不知道这是否仍然相关,但这是一种简单的方法。
private string StripInput(string input)
{
var output = input
.Replace(" ", "_")
.ToLower().Trim();
return output;
}
string TEST = "Hello World";
litTest.Text = StripInput(TEST);
将出现:hello_world