Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要关于正则表达式的帮助来解析人工输入的时间吗_C#_.net_Regex - Fatal编程技术网

C# 需要关于正则表达式的帮助来解析人工输入的时间吗

C# 需要关于正则表达式的帮助来解析人工输入的时间吗,c#,.net,regex,C#,.net,Regex,我对Regex很陌生,工作也很努力,但在我看来,这已经超出了简单的范畴。我了解如何在.Net中创建Regex对象,但我不确定一旦有了模式,如何将其用于我的特定用途 Regex regex = new Regex("(at ){0,1}[0-9]{1,2}(:[0-9]{2}){0,1}(?:[ap]m?){0,1}"); 我需要能够记下一句话,比如晚餐将在晚上9点在你最喜欢的餐厅,并获得价值{晚餐将在你最喜欢的餐厅,晚上9点 }如果存在,请在处删除 完整的测试用例: "Dinner at 9p

我对Regex很陌生,工作也很努力,但在我看来,这已经超出了简单的范畴。我了解如何在.Net中创建Regex对象,但我不确定一旦有了模式,如何将其用于我的特定用途

Regex regex = new Regex("(at ){0,1}[0-9]{1,2}(:[0-9]{2}){0,1}(?:[ap]m?){0,1}");
我需要能够记下一句话,比如晚餐将在晚上9点在你最喜欢的餐厅,并获得价值{晚餐将在你最喜欢的餐厅,晚上9点 }如果存在,请在处删除

完整的测试用例:

"Dinner at 9pm"            { "Dinner", "9pm" }
"Dinner at9pm"             { "Dinner", "9pm" }
"Dinner 9pm"               { "Dinner", "9pm" }
"Dinner 9p"                { "Dinner", "9pm" }
"Dinner 9a"                { "Dinner", "9am" }
"Dinner 9pZ"               { "Dinner 9pZ", "" }
"Dinner 9aZ"               { "Dinner 9aZ", "" }
"Dinner at 9"              { "Dinner", "9" }
"Dinner at 9:15pm"         { "Dinner", "9:15pm" }
"Dinner at 9:15"           { "Dinner", "9:15" }
"Dinner at9:15"            { "Dinner", "9:15" }
"Dinner at 9pm in Seattle" { "Dinner in Seattle", "9pm" }
"Dinner at9pmin Seattle"   { "Dinner in Seattle", "9pm" }
"Dinner at9in Seattle"     { "Dinner in Seattle", "9" }
"Dinner 9in Seattle"       { "Dinner 9in Seattle", "" }
"9pm Dinner"               { "Dinner", "9pm" }
"The 9pm Dinner was good"  { "The Dinner as good", "9pm" }
"Dinner at 9pmpm"          { "Dinner pm" "9pm" }
"Dinner at 9:15pmpm"       { "Dinner pm" "9:15pm" }
为了进一步澄清,除非是列出的第一个数字,否则不带:或am/pm的数字必须以at开头。am和pm要求以M或结尾


除了测试用例之外,我不理解使用上面括号中的regex对象列表获取所需值所需的语法。

执行此操作的regex将非常复杂,并且在诸如晚上9点晚餐之类的情况下,它也不会按预期顺序返回结果。如果你愿意花一点时间,写一篇基础文章可能会更简单。输入中的每个单词都将构成一个标记,您可以根据自己的需求轻松地制定规则。例如:

event: "Dinner" time |
       "Dinner" location |
       "Dinner" time location |
       "Dinner" location time

time:  "at" number ":" number "am"/"pm"
       /* etc. */
然后为每个非终端事件、时间、位置等编写一个小函数,该函数将完成其部分并返回结果


正如您所看到的,您的需求已经带来了太多的可能性,如果可能的话,正则表达式只会让它变得非常混乱。

执行此操作的正则表达式将非常复杂,并且在晚上9点晚餐等情况下,它也不会按预期顺序返回结果。如果你愿意花一点时间,写一篇基础文章可能会更简单。输入中的每个单词都将构成一个标记,您可以根据自己的需求轻松地制定规则。例如:

event: "Dinner" time |
       "Dinner" location |
       "Dinner" time location |
       "Dinner" location time

time:  "at" number ":" number "am"/"pm"
       /* etc. */
然后为每个非终端事件、时间、位置等编写一个小函数,该函数将完成其部分并返回结果


正如您所见,您的需求已经带来了太多的可能性,如果可能的话,正则表达式只会让它变得非常混乱。

该死的,我希望这是最终的结果。。。或者至少是可行的。@Erik:如果你想知道的话,真正的结局是一个。正则表达式在其应用程序中是最受限制的,而大多数编程语言以及您自己的需求都可以通过所谓的a来解析。该死的,我希望这是最终的结果。。。或者至少是可行的。@Erik:如果你想知道的话,真正的结局是一个。到目前为止,正则表达式在其应用程序中是最受限制的,而大多数编程语言以及您自己的需求都可以通过所谓的。