繁体   English   中英

匹配一行文本中的正则表达式模式,而不定位引号中的文本

[英]Match regex pattern in a line of text without targeting the text within quotations

到目前为止,Stackoverflow对我的正则表达式问题的回答一直很慷慨,但是对于这个问题,我正在空白处做什么,但似乎无法在这里找到答案。

因此,我正在解析一个字符串,例如,下面是一行VB风格的代码,如下所示:

 Call     Function  (    "Str ing 1   ", "String 2"    , "   String    3  ", 1000    )    As   Integer
      Dim    x   = "This    string  should not be affected    "

我正在尝试解析文本,以消除所有的前导空格,尾随空格和多余的内部空格(当两个“单词/块”用两个或多个空格分隔开时, 当字符与字符之间存在一个或多个空格时,括号)在C#中使用正则表达式。 解析以上内容后的结果应如下所示:

Call Function("Str ing 1   ", "String 2", "   String    3  ", 1000) As Integer
Dim x = "This    string  should not be affected    "

我遇到的问题是,我想解析引号(即字符串)中包含的任何文本以外的所有行。 基本上,如果字符串中有多余的空格或其他内容,我想假设它是预期的并且继续前进而根本不更改字符串,但是如果行文本中的引号之外有多余的空格,我想解析并相应地进行调整。

到目前为止,我有下面的正则表达式可以完成我上面提到的所有解析,唯一的问题是,它将像行的任何其他部分一样影响字符串的内容:

    var rx = new Regex(@"\A\s+|(?<=\s)\s+|(?<=.)\s+(?=\()|(?<=\()\s+(?=.)|(?<=.)\s+(?=\))|\s+\z")
    .
    .
    .
    lineOfText = rx.Replace(lineOfText, String.Empty);

任何人都知道我该如何解决这个问题,或者知道过去的回答我找不到的问题? 谢谢!

由于要逐行读取文件,因此可以使用以下修复程序:

("[^"]*(?:""[^"]*)*")|^\s+|(?<=\s)\s+|(?<=\w)\s+(?=\()|(?<=\()\s+(?=\w)|(?<=\w)\s+(?=\))|\s+$

$1替换匹配的文本,以恢复用("[^"]*(?:""[^"]*)*")捕获的字符串文字。

观看演示

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM