public CommandContext(RegexMode mode, RegexOptions options, string inputRegex, string inputFormat, string inputText, string outputText) { this.RegexMode = mode; this.RegexOptions = options; this.InputRegex = inputRegex; this.InputFormat = inputFormat; this.InputText = inputText; this.OutputText = outputText; }
/// <summary> /// 验证规则 /// </summary> /// <param name="regexMode">验证模式</param> /// <param name="msg">错误消息</param> /// <returns></returns> private static string RegexPrecept(RegexMode regexMode, string title, ref string errorMsg) { string regValue = string.Empty; errorMsg = string.Empty; switch (regexMode) { case RegexMode.Age: regValue = @"^([0-9]{1,2}|1[0-4][0-9]|150)$"; errorMsg = title + "格式错误,必须介于0-150之间!"; break; case RegexMode.Chinese: //[\u4e00-\u9fa5] //表示中文字符 //[^\u4e00-\u9fa5] //表示不可存在中文 //区别在于存在字符^ regValue = @"[^\u4e00-\u9fa5]"; errorMsg = title + "不可使用中文字符!"; break; case RegexMode.Email: regValue = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; errorMsg = title + "格式错误,如:[email protected] !"; break; case RegexMode.FloatingPointNumbers: regValue = @"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$"; errorMsg = title + "必须输入浮点数,如8.88!"; break; case RegexMode.Integer: regValue = @"^-?\d+$"; errorMsg = title + "必须输入整数!"; break; case RegexMode.IP: regValue = @"\d+\.\d+\.\d+\.\d+"; errorMsg = title + "格式错误!"; break; case RegexMode.PositiveInteger: regValue = @"^\d+$"; errorMsg = title + "必须输入正整数!"; break; case RegexMode.PostCode: regValue = @"\d{6}"; errorMsg = title + "格式错误,如:443400!"; break; case RegexMode.URL: regValue = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"; errorMsg = title + "格式错误,如:http://www.baidu.com !"; break; } return(regValue); }
public RegexProcessContext(string matchRegexExpression, RegexOptions matchRegexOptions, string replaceRegexPattern, string inputText, RegexMode currentMode, OutputMode outputMode) { MatchRegexExpression = matchRegexExpression; MatchRegexOptions = matchRegexOptions; InputText = inputText; CurrentMode = currentMode; OutputMode = outputMode; if (replaceRegexPattern == null) { replaceRegexPattern = String.Empty; } ReplaceRegexPattern = replaceRegexPattern.Replace("\\n", Environment.NewLine).Replace("\\t", " "); }
/// <summary> /// 验证规则 /// </summary> /// <param name="regexMode">验证模式</param> /// <param name="msg">错误消息</param> /// <returns></returns> private static string RegexPrecept(RegexMode regexMode, string title, ref string errorMsg) { string regValue = string.Empty; errorMsg = string.Empty; switch (regexMode) { case RegexMode.Age: regValue = @"^([0-9]{1,2}|1[0-4][0-9]|150)$"; errorMsg = title + "格式错误,必须介于0-150之间!"; break; case RegexMode.Chinese: //[\u4e00-\u9fa5] //表示中文字符 //[^\u4e00-\u9fa5] //表示不可存在中文 //区别在于存在字符^ regValue = @"[^\u4e00-\u9fa5]"; errorMsg = title + "不可使用中文字符!"; break; case RegexMode.Email: regValue = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; errorMsg = title + "格式错误,如:[email protected] !"; break; case RegexMode.FloatingPointNumbers: regValue = @"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$"; errorMsg = title + "必须输入浮点数,如8.88!"; break; case RegexMode.Integer: regValue = @"^-?\d+$"; errorMsg = title + "必须输入整数!"; break; case RegexMode.IP: regValue = @"\d+\.\d+\.\d+\.\d+"; errorMsg = title + "格式错误!"; break; case RegexMode.PositiveInteger: regValue = @"^\d+$"; errorMsg = title + "必须输入正整数!"; break; case RegexMode.PostCode: regValue = @"\d{6}"; errorMsg = title + "格式错误,如:443400!"; break; case RegexMode.URL: regValue = @"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"; errorMsg = title + "格式错误,如:http://www.baidu.com !"; break; } return regValue; }
/// <summary> /// 正则验证(注意:第一句验证,isContinue需设置为true) /// </summary> /// <param name="value">要验证的值</param> /// <param name="title">错误消息标题</param> /// <param name="validateEmpty">数据为空字符时是否验证</param> /// <param name="regexMode">验证模式</param> /// <param name="isContinue">是否继续验证</param> /// <param name="errorMsg">验证失败显示的消息</param> /// <returns></returns> public static void RegexValidate(TextBox textBox, string title, bool validateEmpty, RegexMode regexMode, ref bool isContinue, ref string errorMsg) { if (isContinue && validateEmpty) { isContinue = Regex.IsMatch(textBox.Text.Trim(), RegexPrecept(regexMode, title, ref errorMsg)); if (!isContinue) { textBox.Focus(); } } errorMsg = isContinue ? string.Empty : errorMsg; }
/// <summary> /// 正则验证(注意:第一句验证,isContinue需设置为true) /// </summary> /// <param name="value">要验证的值</param> /// <param name="title">错误消息标题</param> /// <param name="validateEmpty">数据为空字符时是否验证</param> /// <param name="regexMode">验证模式</param> /// <param name="isContinue">是否继续验证</param> /// <param name="errorMsg">验证失败显示的消息</param> /// <returns></returns> public static void RegexValidate(string value, string title,bool validateEmpty, RegexMode regexMode, ref bool isContinue, ref string errorMsg) { if (isContinue && validateEmpty) { isContinue = Regex.IsMatch(value, RegexPrecept(regexMode, title, ref errorMsg)); } errorMsg = isContinue ? string.Empty : errorMsg; }
private void ApplyButton_Click(object sender, RoutedEventArgs e) { DateTime startTime = DateTime.Now; string TT1 = T1; // T1 Temp string TT2 = T2; // T2 Temp // 内容查找与替换 if (ReplaceText.IsChecked.Value) { TT1 = F.Replace(TT1, rtFindText.Text, rtReplacement.Text, !rtIgnoreCase.IsChecked.Value); } // 删除括号内容 else if (Bracket.IsChecked.Value) { TT1 = F.Bracket(TT1, ref TT2, brLeft.Text, brRight.Text, brKeepBracket.IsChecked.Value, brNestBracket.IsChecked.Value); if (!brShowBracketContent.IsChecked.Value) { TT2 = F.EM; } } // 删除空白 else if (DeleteBlank.IsChecked.Value) { int mode = 0; if (dbRemoveAll.IsChecked.Value) { mode = 1; } else if (dbRemoveFront.IsChecked.Value) { mode = 2; } else if (dbRemoveEnd.IsChecked.Value) { mode = 3; } else if (dbRemoveFrontAndEnd.IsChecked.Value) { mode = 4; } TT1 = F.Blank(TT1, mode); } // 换行符相关 else if (NewlineSymbol.IsChecked.Value) { int mode = 0; if (nsRemoveAll.IsChecked.Value) { mode = 1; } else if (nsRemoveUseless.IsChecked.Value) { mode = 2; } else if (nsAddNewlines.IsChecked.Value) { mode = 3; } TT1 = F.Return(TT1, mode); } // 文本顺序调换 else if (TextOrder.IsChecked.Value) { int mode = 0; if (toByLine.IsChecked.Value) { mode = 1; } else if (toByWord.IsChecked.Value) { mode = 2; } else if (toByWordInLine.IsChecked.Value) { mode = 3; } TT1 = F.Reorder(TT1, mode); } // 批量重复文本 else if (RepeatText.IsChecked.Value) { TT1 = F.Repeat(TT1, rptTime.Text, rptAutoNewLine.IsChecked.Value); } // 逐行插入相同内容 else if (AddByLine.IsChecked.Value) { TT1 = F.AddTextByLine(TT1, ablInsertContent.Text, ablPosition.Text, ablIgnoreEmpty.IsChecked.Value, ablIgnoreBlank.IsChecked.Value); } // 逐行插入不同内容 else if (SpecialInsert.IsChecked.Value) { TT1 = F.AddTextsByLine(TT1, TT2, siPosition.Text, siIngoreEmpty.IsChecked.Value); } // 隔行删除 else if (DeleteByLine.IsChecked.Value) { TT1 = F.DeleteByLine(TT1, ref TT2, dblReserve.Text, dblRemove.Text); } // 隔行插入 else if (InsertByLine.IsChecked.Value) { TT1 = F.InsertByLine(TT1, TT2, iblReserve.Text, iblInsert.Text); } // 逐行添加序号 else if (AddIndexByLine.IsChecked.Value) { IndexFormat mode = IndexFormat.Normal; if (aiblNormal.IsChecked.Value) { mode = IndexFormat.Normal; } else if (aiblChinese.IsChecked.Value) { mode = IndexFormat.Chinese; } else if (aiblRoman.IsChecked.Value) { mode = IndexFormat.Roman; } else if (aiblCircle.IsChecked.Value) { mode = IndexFormat.Circle; } else if (aiblBracket.IsChecked.Value) { mode = IndexFormat.Bracket; } int start = 1; int digits = 0; if (int.TryParse(aiblStartValue.Text, out start) && int.TryParse(aiblDigits.Text, out digits)) { TT1 = F.InsertIndexAt(TT1, aiblLeft.Text, aiblRight.Text, start, digits, aiblPosition.Text, mode, aiblIgnoreEmpty.IsChecked.Value, aiblAlignNumber.IsChecked.Value); } } // 文本格式转换 else if (FormatText.IsChecked.Value) { TextFormatMode mode = TextFormatMode.Tranditional; if (ftST.IsChecked.Value) { mode = TextFormatMode.Tranditional; } else if (ftTS.IsChecked.Value) { mode = TextFormatMode.Simplified; } else if (ftLU.IsChecked.Value) { mode = TextFormatMode.Upper; } else if (ftUL.IsChecked.Value) { mode = TextFormatMode.Lower; } else if (ftFU.IsChecked.Value) { mode = TextFormatMode.InitialUpper; } else if (ftCP.IsChecked.Value) { mode = TextFormatMode.Pinyin; } TT1 = F.TextFormat(TT1, mode); } // 正则表达式 else if (RegularExpression.IsChecked.Value) { RegexOptions option = F.GetRexOptions(reIgnoreCase.IsChecked.Value, reMultiline.IsChecked.Value, reSingleline.IsChecked.Value, reIgnorePatternWhitespace.IsChecked.Value, reExplicitCapture.IsChecked.Value); RegexMode mode = RegexMode.Match; if (reReplaceOnly.IsChecked.Value) { mode = RegexMode.Replace; } else if (reReplaceAndShow.IsChecked.Value) { mode = RegexMode.ReplaceAndMatch; } else if (reShowOnly.IsChecked.Value) { mode = RegexMode.Match; } TT1 = F.UseRegex(TT1, ref TT2, reFind.Text, reReplace.Text, mode, option); } // 自定义转换列表 else if (TransformList.IsChecked.Value) { PairListManager manager; if (TransformListFiles.Text == PairListPanel.CurrentListName.Text) { manager = PairListPanel.Manager; } else { manager = new PairListManager(pairFolder + @"\" + TransformListFiles.Text + ".txt"); } TT1 = F.TransformList(TT1, manager, tlR.IsChecked.Value); } // 文件批量重命名 else if (RenameFiles.IsChecked.Value) { ApplyRename(); return; } // 剪贴板辅助工具 else if (ClipboardHelper.IsChecked.Value) { if (isUsingPasteHelper) { return; } PasteLines = F.SplitByString(TT1, F.NL, !chIgnoreBlank.IsChecked.Value); if (PasteLines.Count == 0) { MessageBox.Show("当前无可复制文本,剪贴板辅助工具开启失败。"); return; } MessageBox.Show("剪贴板辅助工具已启用,\n共采集到文本信息 " + PasteLines.Count.ToString() + " 行。"); isUsingPasteHelper = true; PasteLineIndex = 0; Clipboard.SetText(PasteLines[0]); // 改变相关控件的IsEnabled,防止用户在使用期间更改相关参数,导致程序出错 chStopButton.Visibility = Visibility.Visible; chIgnoreBlank.IsEnabled = false; chCycle.IsEnabled = false; chAutoPaste.IsEnabled = false; chAutoKeyDown.IsEnabled = false; chDelay.IsEnabled = false; if (chAutoPaste.IsChecked.Value) { hotkey = new HotKey(this, HotKey.KeyFlags.MOD_CONTROL, Form.Keys.V); hotkey.OnHotKey += HotKeyEvent; } else { kh = new KeyboardHook(); kh.SetHook(); kh.OnKeyDownEvent += HookOnKeyDownEvent; } } // 最终执行效果 T1 = TT1; if (EditorPanel.IsShowingBox2 || EditorPanel.AlwaysShowingBox2) // 当Box2不显示时,使其缓存的文本内容不改变 { T2 = TT2; } DateTime stopTime = DateTime.Now; if (showRunTime) { TimeSpan span = stopTime - startTime; MessageBox.Show("执行耗时" + span.TotalMilliseconds.ToString() + "毫秒"); } }
/* * 所有的字符串操作函数,如果只有一个输出文本,则采用return string的方式 * 如果有超过一个输出文本,则主要的输出内容采用return string * 其余的采用ref string */ /// <summary> /// 使用正则表达式 /// </summary> /// <param name="input">输入文本</param> /// <param name="output">匹配到的内容</param> /// <param name="pattern">模式</param> /// <param name="replacement">替换为</param> /// <param name="mode">该功能的几种模式</param> /// <param name="options">正则表达式选项,默认为无</param> /// <returns>修改后的文本</returns> public static string UseRegex(string input, ref string output, string pattern, string replacement, RegexMode mode = RegexMode.Replace, RegexOptions options = RegexOptions.None) { if (mode == RegexMode.Replace) { replacement = ReplaceSpecialWords(replacement); return(Regex.Replace(input, pattern, replacement, options)); } else if (mode == RegexMode.ReplaceAndMatch) { replacement = ReplaceSpecialWords(replacement); output = CombineWith(Regex.Matches(input, pattern, options), NL); return(Regex.Replace(input, pattern, replacement, options)); } else if (mode == RegexMode.Match) { output = CombineWith(Regex.Matches(input, pattern, options), NL); return(input); } return(EM); }
/// <summary> /// 正则验证(注意:第一句验证,isContinue需设置为true) /// </summary> /// <param name="value">要验证的值</param> /// <param name="title">错误消息标题</param> /// <param name="validateEmpty">数据为空字符时是否验证</param> /// <param name="regexMode">验证模式</param> /// <param name="isContinue">是否继续验证</param> /// <param name="errorMsg">验证失败显示的消息</param> /// <returns></returns> public static void RegexValidate(string value, string title, bool validateEmpty, RegexMode regexMode, ref bool isContinue, ref string errorMsg) { if (isContinue && validateEmpty) { isContinue = Regex.IsMatch(value, RegexPrecept(regexMode, title, ref errorMsg)); } errorMsg = isContinue ? string.Empty : errorMsg; }