【问题标题】:Regex to match positive and negative numbers and text between "" after a character正则表达式匹配字符后“”之间的正负数和文本
【发布时间】: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 &lt;data&gt;,其中&lt;data&gt; 可能包含在引号中?如果是这样,为什么不在此基础上解析它?
  • 使用正则表达式^\*\w+["\s]+([^"\n]+)并抓取捕获组#1
  • 是的,格式总是这样,是的,是个好主意,问题是我对正则表达式没有太多经验。
  • 可能是^\*[A-Z]+ (?:([-\d ]+)|"(.*)")$ 之类的东西?这会查找数字(但不太关心格式,例如它允许 - 任何地方),或引号中的内容
  • 你的两种模式在这里都没有做任何有意义的事情。顺便说一句,您应该使用字符串模式,而不是正则表达式文字,在 C# 中定义正则表达式。

标签: c# regex


【解决方案1】:

您可以将文件读入字符串并运行以下正则表达式:

var matches = Regex.Matches(filecontents, @"(?m)^\*\w+[\s-[\r\n]]*""?(.*?)""?\r?$")
            .Cast<Match>()
            .Select(x => x.Groups[1].Value)
            .ToList();

请参阅.NET regex demo。

详情:

  • (?m) - RegexOptions.Multiline 选项开启
  • ^ - 行首
  • \* - 一个 * 字符
  • \w+ - 一个或多个单词字符
  • [\s-[\r\n]]* - 除 CR 和 LF 之外的零个或多个空格
  • "? - 一个可选的 " 字符
  • (.*?) - 第 1 组:除 LF 字符外的任何零个或多个字符,尽可能少
  • "? - 一个可选的 " 字符
  • \r? - 一个可选的 CR
  • $ - 行/字符串结束。

【讨论】:

  • 我一直在尝试,但是在将模式放入字符串变量时," 字符出现问题,我该如何解决?
  • @jms2505 抱歉,我这边的复制/粘贴问题,您需要将它们加倍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多