【发布时间】:2021-03-08 10:02:12
【问题描述】:
我需要一个正则表达式来处理包含正数和负数的输入,有时还需要一个介于" 和" 之间的字符串。我不确定这是否只能以一种模式完成。以下是该模式的一些测试用例:
*PATH "C:\Users\User\Desktop\Media\SoundBanks\Ambient\WAV_Data\AD_SMP_SFX_WIND0.wav"
*NODECOLOR 0 255 140
*FILEREF -7
*FREQUENCY 22050
这个想法是使用返回的模式:
C:\Users\User\Desktop\Media\SoundBanks\Ambient\WAV_Data\AD_SMP_SFX_WIND0.wav
0 255 140
-7
22050
内容总是在字符 * 之后。我将其分为两种模式,因为我不知道如何将这一切合二为一,但不起作用:
MatchCollection NumberMtaches = Regex.Matches(FileLine, @"(?<=[*])-?[0-9]+");
MatchCollection FilePathMatches = Regex.Matches(FileLine, @"/,([^,]*)(?=,)/g");
【问题讨论】:
-
格式是否始终为
*SOMETHING <data>,其中<data>可能包含在引号中?如果是这样,为什么不在此基础上解析它? -
使用正则表达式
^\*\w+["\s]+([^"\n]+)并抓取捕获组#1 -
是的,格式总是这样,是的,是个好主意,问题是我对正则表达式没有太多经验。
-
可能是
^\*[A-Z]+ (?:([-\d ]+)|"(.*)")$之类的东西?这会查找数字(但不太关心格式,例如它允许-任何地方),或引号中的内容 -
你的两种模式在这里都没有做任何有意义的事情。顺便说一句,您应该使用字符串模式,而不是正则表达式文字,在 C# 中定义正则表达式。