C# 我正在尝试使用正则表达式捕获字符串。下面是我试图从中提取数据的文本文件的示例

C# 我正在尝试使用正则表达式捕获字符串。下面是我试图从中提取数据的文本文件的示例,c#,regex,C#,Regex,我尝试了以下正则表达式: sample data1: value1 sampledata2: value value 2 sample data3: data3 sampledata5: sampledata4:

我尝试了以下正则表达式:

        sample data1:              value1                      sampledata2: value value 2                                
       sample data3:                                            data3       sampledata5:      
        sampledata4: value value  value2
sampledata6:                     sampledata7: value-value,value
我假设如果关键字后面有25个空格,那么该关键字的值为null。 值最多有2个空格。例:

以下数据具有以下值:

示例数据1-value1 sampledata2值2 示例数据3-data3 sampledata5空 sampledata4值2 sampledata6空 sampledata7值,值 然而,我认为这25个空间并不安全。
有没有其他方法来实现这一点?

除了空格,还会有其他值吗? 您可以反转逻辑并检查任何内容,而不是空白。将它与行尾说明符和多行选项结合使用,您就可以开始了

比如:

value  value - valid
 valuevalue - valid 
value   value-invalid(3 whitespaces between values)
根据评论: 好的,别介意我以前的编辑;我终于找到了一台电脑,并确定它可能需要一些小的调整,以完全符合您的情况:

keyword\s*([^\s]*)$
这里的教训是,您应该寻找可以用作分隔符的内容。在这种情况下,除了知道会有另一个关键字后跟一个:

同样,对于行尾的值,请使用:

keyword:\s*([^\s:]+\s{0,2}[^\s:]*)\s[^s]+:

?不清楚你在问什么。对不起,忘了编辑示例数据,我想现在更可读了。我不清楚你的答案,但我想做的是捕获关键字和冒号后最多有2个空格的单词,而不依赖冒号后的特定空格数。但是,如果冒号后面的值是最多带空格2的单词,但前面有冒号或行尾,那么该关键字的值将为空。您的问题有点不清楚。它更像这样:关键字:\w*[^\w]*\w{0,2}[^\w]*在我的手机上键入。检查语法:我试过你的语法。对于这个示例Keyword1:Keyword2:如果提供了Keyword1,则它与Keyword2:Keyword2:匹配,但应该为null。它应该是这样工作的:关键字1:value1关键字2:如果提供了关键字1,则value1将匹配。我稍后会尝试发布一个屏幕截图,以使其更清晰,我无法在Office中上载图像。我没有意识到数据会在同一条线上。这让事情变得更难了。如果您在使用中发布几行dataGood调用,\b也可以使用?而不是{0,1},它的意思是相同的,但是写起来要短一点
keyword:\s*([^\s:]+\s{0,2}[^\s:]*)\s[^s]+:
keyword:\s*([^\s:]+\s{0,2}[^\s:]*)$