如何在 C# 中将每个大写字母替换为下划线和该字母?注意:除非该字符已经由下划线处理过。
更新:
例如,
MikeJones
会被转换为
Mike_Jones
但 Mike_Jones
不会被转换为
Mike__Jones
使用正则表达式是最好的方法吗?我该从哪里开始?
正则表达式听起来最好:
string input = "Test_StringForYou";
string replaced = Regex.Replace(input, @"(?<!_)([A-Z])", "_$1");
Console.WriteLine(replaced);
输出: _Test_String_For_You
请确保添加 using System.Text.RegularExpressions;
(?<!_|^)([A-Z])
或者 (?<=[a-z])([A-Z])
应该可以解决这个问题。 - Alan Moore所以你不想改变字母的大小写!我知道你没有说你想改变,但是我们中的一些人会因为这个问题经常出现而假设它。在这种情况下,这个正则表达式就是你需要的:
s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");
进行小写字母的正向先行断言也可以确保您不会在字符串开头添加下划线。
Regex.Replace(subject, "([A-Z])", "_$1");
将“The Quick Brown Fox”更改为“_The _Quick _Brown _Fox”
这是您需要的吗?
不知道这是否仍然相关,但以下是一种简单的方法。
private string StripInput(string input)
{
var output = input
.Replace(" ", "_")
.ToLower().Trim();
return output;
}
string TEST = "Hello World";
litTest.Text = StripInput(TEST);
将会输出为:hello_world
using System.Text.RegularExpressions;
//-----------------------------------------------------------------
string str = Regex.Replace("MyString", @"([A-Z])", " $1").Trim();
//-----------------------------------------------------------------
str givs "My String"
它运行得很好
如果您想将此内容转换为:
示例文本
变成
_sample _text
那么,正则表达式并不能严格实现这一点,因为您无法在替换表达式中转换捕获或组。当然,您可以使用Jake的答案并在末尾添加.ToLower()
调用,这将用小写字母替换所有大写字母。
如果您只想在每个没有下划线的大写字母前加上下划线,则仅使用Jake的答案即可完成。
ToLower()
可能会导致更清晰、更简单的代码。 - Adam Robinson.ToLower()
比使用正则表达式更好。 - kennytm