我认为我在C#中的正则表达式模式不正确
本文关键字:正则表达式 模式 不正确 | 更新日期: 2023-09-27 18:00:39
我正在检查正则表达式是否与字符串匹配。我有一个看起来像somename_somthing.txt
的文件名,我想将其与somename_*.txt
匹配,但当我试图传递应该匹配的内容时,我的代码失败了。这是我的密码。
string pattern = "somename_*.txt";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
using (ZipFile zipFile = ZipFile.Read(fullPath))
{
foreach (ZipEntry e in zipFile)
{
Match m = r.Match("somename_something.txt");
if (!m.Success)
{
throw new FileNotFoundException("A filename with format: " + pattern + " not found.");
}
}
}
星号匹配下划线并将其丢弃。
尝试:
somename_('w+).txt
此处的(''w+)将与此位置的组匹配。
你可以在这里看到它的匹配:https://regex101.com/r/qS8wA5/1
一般
此代码中的Regex give将_与*匹配,这意味着零个或多个下划线,而不是您想要的。*用于表示前一项中的零个或多个。请尝试
^somename_(.*)'.txt$
这与第一部分"somename_"完全匹配。
然后任何东西(.*)
最后是结尾".txt"。反斜杠转义"句点"。
更具体
你也可以说,如果你只想要字母,而不是数字或符号在匹配的中间部分:
^somename_[a-z]*'.txt$
编写时,您的正则表达式
somename_*.txt
匹配(不区分大小写):
- 文字文本
somename
,后跟 - 零个或多个下划线字符(
_
),后面跟 - 任何字符(换行符除外),后跟
- 文本
txt
它将匹配源文本中任何处的。你可能想写一些类似的东西
Regex myPattern = new Regex( @"
^ # anchor the match to start-of-text, followed by
somename # the literal 'somename', followed by
_ # a literal underscore character, followed by
.* # zero or of any character (except newline), followed by
'. # a literal period/fullstop, followed by
txt # the literal text 'txt'
$ # with the match anchored at end-of-text
" , RegexOptions.IgnoreCase|RegexOptions.IgnorePatternWhitespace
) ;
嗨,我认为模式应该是
string pattern = "somename_.*''.txt";
问候