我创建了一个正则表达式,删除了像(<>'&)这样的特殊字符,并将每个单词的第一个字母设为大写,并在两个单词之间添加下划线(_)。例如,
输入:"V_DV3501_Value can't be empty"
输出:"V_DV3501_Value_Cant_Be_Empty"
我创建的正则表达式是生成输出,
输出:"V_DV3501_Value_Can't_Be_Empty"
关注点是撇号(')字符未被字符串替换。如果你可以在代码中提出以下任何其他模式来解决这个问题,我很好。
class Program
{
static void Main(string[] args)
{
string createString = "";
string input = "";
var pattern = @"(?:[^a-zA-Z_]*)((?<output>[a-zA-Z0-9_]*)[\s+&<>\',\/=-]*|$)*";
var subject = "V_DV3501_Value can't be empty";
subject = subject.ToString().Replace("&", "and");
var regex = new Regex(pattern);
var match = regex.Match(subject);
Console.WriteLine("pattern: {0} {1} Length: {2}", pattern, match.Success, match.Length);
foreach (Capture capture in match.Groups["output"].Captures)
{
Console.WriteLine(" {0} @ {1} length {2}", capture.Value, capture.Index, capture.Length);
input = capture.Value + "_";
if (!String.IsNullOrEmpty(input))
{
input = input.First().ToString().ToUpper() + input.Substring(1);
}
createString = createString + input;
}
createString = createString.Remove(createString.Length - 2);
Console.WriteLine("Final: " + createString);
}
}
由于
答案 0 :(得分:0)
您可以使用以下解决方案:
var str = "V_DV3501_Value can't be empty";
var res = Regex.Replace(str, @"[\W-[']](\p{L})|'", m =>
m.Groups[1].Success ? string.Format("_{0}", m.Groups[1].Value.ToUpper()) : "");
Console.WriteLine(res);
// => V_DV3501_Value_Cant_Be_Empty
请参阅IDEONE demo
这里的想法是使用[\W-[']](\p{L})|'
正则表达式匹配任何非单词字符,但'
(带[\W-[']]
除外,后跟_
替换)带有一个字母(带(\p{L})
)并捕获该字母,以便稍后我们可以检查该组是否参加了比赛(如果是,则将其设为大写),或者只匹配'
以替换它什么都没有。