Files
MsAddIns/ExportExcelTest/NumberMatcher.cs
2026-02-28 21:01:57 +08:00

83 lines
2.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Collections.Generic;
namespace CustomOpenAddins
{
/// <summary>
/// 数字匹配工具类
/// </summary>
public static class NumberMatcher
{
/// <summary>
/// 匹配中文数字的正则表达式(零到九,包含大写)
/// </summary>
private const string ChineseNumberPattern = "[零一二三四五六七八九壹贰叁肆伍陆柒捌玖两]";
/// <summary>
/// 匹配希腊数字的正则表达式(Ⅰ到Ⅹ)
/// </summary>
private const string GreekNumberPattern = "[ⅠⅡⅢⅣⅤⅥⅦⅧⅨ]";
/// <summary>
/// 检查字符串是否是中文数字
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns>是否匹配</returns>
public static bool IsChineseNumber(string input)
{
if (string.IsNullOrEmpty(input))
return false;
return System.Text.RegularExpressions.Regex.IsMatch(input, $"^{ChineseNumberPattern}$");
}
/// <summary>
/// 检查字符串是否是希腊数字
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns>是否匹配</returns>
public static bool IsGreekNumber(string input)
{
if (string.IsNullOrEmpty(input))
return false;
return System.Text.RegularExpressions.Regex.IsMatch(input, $"^{GreekNumberPattern}$");
}
/// <summary>
/// 从字符串中提取第一个匹配的数字(中文或希腊数字)
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns>匹配到的数字字符串未匹配返回null</returns>
public static string ExtractFirstNumber(string input)
{
if (string.IsNullOrEmpty(input))
return null;
var pattern = $"({ChineseNumberPattern}|{GreekNumberPattern})";
var match = System.Text.RegularExpressions.Regex.Match(input, pattern);
return match.Success ? match.Value : null;
}
/// <summary>
/// 从字符串中提取所有匹配的数字(中文或希腊数字)
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns>匹配到的数字字符串集合</returns>
public static IEnumerable<string> ExtractAllNumbers(string input)
{
if (string.IsNullOrEmpty(input))
yield break;
var pattern = $"({ChineseNumberPattern}|{GreekNumberPattern})";
var matches = System.Text.RegularExpressions.Regex.Matches(input, pattern);
foreach (System.Text.RegularExpressions.Match match in matches)
{
yield return match.Value;
}
}
}
}