Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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#_Regex_Parsing - Fatal编程技术网

C# 被正则表达式难住了(积极前瞻问题?)

C# 被正则表达式难住了(积极前瞻问题?),c#,regex,parsing,C#,Regex,Parsing,我被一个正则表达式问题难住了。我一直在一个项目中使用它们,它们工作得很好,但后来我发现一个我认为可以用积极的展望来解决的情况,但我的尝试并没有像我预期的那样产生结果 为了举例说明,我在下面写了一行。其中,我希望返回两个匹配项,第一个包含“This”和“thisThing”,另一个包含“That”和“thatThing”,其中第一个值只能是“This”或“That”,第二个值可以是任何(\w*)模式 我以为这会是这样的: K\.(This|That) (????????????????)

我被一个正则表达式问题难住了。我一直在一个项目中使用它们,它们工作得很好,但后来我发现一个我认为可以用积极的展望来解决的情况,但我的尝试并没有像我预期的那样产生结果

为了举例说明,我在下面写了一行。其中,我希望返回两个匹配项,第一个包含“This”和“thisThing”,另一个包含“That”和“thatThing”,其中第一个值只能是“This”或“That”,第二个值可以是任何(\w*)模式

我以为这会是这样的:

K\.(This|That)  (????????????????)    (\w*)(?=\))
意思是,找到“K”之后的“This”或“That”,然后在“)”之前找到第一个单词。然而,我真的不明白如何指定(向前看,直到找到一个“)”,然后回溯,直到找到它背后的单词。这可能吗?

您可以使用:

或者:(如果不希望右括号成为匹配的一部分)

通过这种方式,它将匹配这个|那个和单词之间的任何内容,但它会懒洋洋地这样做(因此,一旦它找到了与
\w*
匹配的内容,它就会使用它,如果没有
),它就会回溯到下面的内容)

您可以使用:

或者:(如果不希望右括号成为匹配的一部分)

通过这种方式,它将匹配这个|那个和单词之间的任何内容,但它会懒洋洋地这样做(因此,一旦它找到了一个与
\w*
很好的匹配项,它就会使用它,如果没有
以下内容,它就会回溯)

怎么样:
K\(这个|那个)(.*((\w+)

这与括号之间的部分不匹配,但在结束括号前只剩下单词字符时就会停止。

如何:
K\(This | That)\(*(\w+)


这个非贪婪地匹配括号之间的部分,但在结束括号之前只剩下单词字符时就会停止。

我不完全理解您要做什么,但是如果您试图在两个离散标记之间找到内容(它们彼此之间没有嵌套),那么是的,你可以用正则表达式来解决这个问题,这个问题让人困惑。你能说得更切题吗?请通过阅读这个简短的建议来改进你的问题谢谢你的建议。下一次我会努力做得更好。我不完全理解你想做什么,但如果你想在两个离散的令牌(它们彼此之间没有嵌套)之间找到内容,那么是的,你可以用正则表达式来做。这个问题让人困惑。你能说得更切题吗?请通过阅读这个简短的建议来改进你的问题谢谢你的建议。下次我会努力做得更好。回答得很好,谢谢你费力地回答了我这个不太完美的问题。非贪婪量词信息。这正是我需要知道的。我对正则表达式的了解正在增加!回答得很好,谢谢你费力地回答了我这个不太完美的问题。非贪婪量词信息。这正是我需要知道的。我对正则表达式的了解正在增加!
K\.(This|That)  (????????????????)    (\w*)(?=\))
K\.(This|That).*?(\w*)\)
K\.(This|That).*?(\w*)(?=\))