繁体   English   中英

简单的C#正则表达式

[英]Simple C# regex

我有一个正则表达式,我需要针对这样的路径进行匹配:“ C:\\Documents and Settings\\User\\My Documents\\ScanSnap\\382893.pd~ ”。 我需要一个正则表达式来匹配所有以'〜'或' .dat '结尾的路径。 我遇到的问题是我不理解如何仅在路径的末尾匹配和否定精确的字符串' .dat '。 即我不想在路径中的其他地方匹配{d,a,t}

我已经建立了正则表达式,但是不需要匹配.dat

[\\w\\s:\\.\\\\]*[^~]$[^\\.dat]

[\\w\\s:\\.\\\\]*这匹配所有单词,空格,冒号,句号和退格键。 [^~]$[^\\.dat]$这会导致以'〜'结尾的匹配失败。 看来我应该可以对'.dat'进行否定的匹配,但是该匹配在我的正则表达式测试器中失败。

我认为我的答案在于根据我所阅读的内容进行分组,有人会指出我正确的方向吗? 我应该补充一点,我正在使用一个允许正则表达式匹配的文件监视程序,我只有一行可以指定正则表达式。

此项看起来类似:正则表达式以匹配多个字符串

您想使用否定的前瞻

^((?!\.dat$)[\w\s:\.\\])*$

顺便说一句,您的字符组( [\\w\\s:\\.\\\\] )不允许在其中使用波浪号(〜)。 您是否打算在文件名中不允许波浪号? 如果是这样的话:

^((?!~$|\.dat$)[\w\s:\.\\~])*$

以下正则表达式:

^.*(?<!\.dat|~)$

匹配不以“〜”或“ .dat”结尾的任何字符串。

^             # the start of the string
.*            # gobble up the entire string (without line terminators!)
(?<!\.dat|~)  # looking back, there should not be '.dat' or '~'
$             # the end of the string

用简单的英语来说: 仅当从字符串末尾向后看时才匹配字符串,没有子字符串'.dat'或'〜'

编辑:您的尝试失败的原因是因为否定的字符类[^ ...]将否定单个字符。 字符类始终与单个字符匹配。 因此,当您执行[^ .dat]时,并不是在否定字符串“ .dat”,而是要匹配'。','d','a'或't'以外的单个字符。

^((?!\.dat$)[\w\s:\.\\])*$

这只是对较早答案的评论:

在字符类[]中,是一个文字。 并且不需要转义。

^((?!\.dat$)[\w\s:.\\])*$

很抱歉将其作为新的解决方案发布,但是我显然没有足够的信誉来仅对答案发表评论。

我相信您正在寻找:

[\w\s:\.\\]*([^~]|[^\.dat])$

像以前一样找到所有字符char,空格,句点(。),反斜杠。 然后在字符串末尾匹配代字号(〜)或'.dat'。 如果您知道字符串应该在新行的开头,则可能还需要在开始处添加一个插入符号(^)。

^[\w\s:\.\\]*([^~]|[^\.dat])$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM