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:]*)$