C# 如何使用正则表达式查找非';引号之间的t?

C# 如何使用正则表达式查找非';引号之间的t?,c#,regex,C#,Regex,我想使用C来编写正则表达式,以查找第一个)字符,该字符没有用单引号或双引号括起来 我有下面的字符串('some()test 1','some text'),1235,“,null)测试一些东西我想找到的唯一的)是null后面的那个 我不确定如何用正则表达式来表示“notbetween”。这是我试过的 [^(("|').*\).*("|'))]\) 但这比我期望的要多 我如何才能正确地找到没有括在引号周围的右括号 如果我的表达式有效,使用C#Regex.Match(str,pattern)应该返

我想使用
C
来编写正则表达式,以查找第一个
字符,该字符没有用单引号或双引号括起来

我有下面的字符串
('some()test 1','some text'),1235,“,null)测试一些东西
我想找到的唯一的
是null后面的那个

我不确定如何用正则表达式来表示“notbetween”。这是我试过的

[^(("|').*\).*("|'))]\)
但这比我期望的要多

我如何才能正确地找到没有括在引号周围的右括号

如果我的表达式有效,使用C#
Regex.Match(str,pattern)
应该返回第一个匹配项

已更新 以下是我希望能够评估的一些文本

  • (“some()test 1”,“some text)”,1235,“,null)测试某些东西
  • (“一些测试1”,“一些文本”,空,”)
  • ()
  • (一)
  • (1,2)
  • (“文本”)
  • (‘文本)’)
  • (“te)t”)
  • (“te)st”)诸如此类

  • Itt似乎是在试图找到最后一个参数和函数的结尾,但我无权发表评论,所以我将在这里写下它

    int FindIndexOfBackwards(string s, char tobefound, int index)
    {
    bool avoided = true;
    int counter = index;
    do
    {
    if( s[counter] == '"' && avoided == true)
    {
         avoided = false;
    }
    else if (s[counter] == '"' && avoided == false)
    {
     avoided = true;
    }
    if(s[counter] == tobefound && avoided == true ) return counter;
    counter--;
    }while( counter > -1);
    return -1;
    }
    
    您可以使用LastIndexOf(“)”)作为函数的第三个参数。例如:

    string parameters = "(\"some () test 1\", 'some text)', 1235,\"\",\"n,ull\" ) ";
    int LastIndexOfComma =FindIndexOfBackwards(parameters, ',', parameters.LastIndexOf(")") );  // it avoids " and find comma that is out of it
    string lastparameter = parameters.Substring(FindIndexOfBackwards(parameters, ',', parameters.LastIndexOf(")") ), parameters.LastIndexOf(")") - 1);
    
    可以使用此方法递归地划分所有参数。
    希望这能有所帮助。

    Itt似乎是在试图找到最后一个参数和函数的结尾,但我无权发表评论,所以我将在这里写下它

    int FindIndexOfBackwards(string s, char tobefound, int index)
    {
    bool avoided = true;
    int counter = index;
    do
    {
    if( s[counter] == '"' && avoided == true)
    {
         avoided = false;
    }
    else if (s[counter] == '"' && avoided == false)
    {
     avoided = true;
    }
    if(s[counter] == tobefound && avoided == true ) return counter;
    counter--;
    }while( counter > -1);
    return -1;
    }
    
    您可以使用LastIndexOf(“)”)作为函数的第三个参数。例如:

    string parameters = "(\"some () test 1\", 'some text)', 1235,\"\",\"n,ull\" ) ";
    int LastIndexOfComma =FindIndexOfBackwards(parameters, ',', parameters.LastIndexOf(")") );  // it avoids " and find comma that is out of it
    string lastparameter = parameters.Substring(FindIndexOfBackwards(parameters, ',', parameters.LastIndexOf(")") ), parameters.LastIndexOf(")") - 1);
    
    可以使用此方法递归地划分所有参数。
    希望能有所帮助。

    那么,正则表达式应该在C#中工作,对吗?如果您想解析一些语言,最好使用专用的解析器。正则表达式最擅长解析纯文本。在这里,这不是一个查找字符而不是中间字符的问题,括号内有字符串文字,使用正则表达式(虽然在某种程度上可能)也不是那么容易,因为问题的提问方式我怀疑能否给出一个好的答案。您必须添加有关要处理的输入类型的更多详细信息。在一般情况下,这里的答案是“不要使用单一正则表达式方法”。@WiktorStribiżew我用一些可能的方法更新了我的问题text@WiktorStribiżew看待这个问题的另一种方法是解析函数“如果有的话”的参数,如果我有一个参数数组,我将在找到的最后一个参数之后立即查找
    。您可以匹配您不想要的,但不需要的。你也可以使用一个向前看来假设外部。所以,正则表达式应该在C#中工作,对吗?如果您想解析一些语言,最好使用专用的解析器。正则表达式最擅长解析纯文本。在这里,这不是一个查找字符而不是中间字符的问题,括号内有字符串文字,使用正则表达式(虽然在某种程度上可能)也不是那么容易,因为问题的提问方式我怀疑能否给出一个好的答案。您必须添加有关要处理的输入类型的更多详细信息。在一般情况下,这里的答案是“不要使用单一正则表达式方法”。@WiktorStribiżew我用一些可能的方法更新了我的问题text@WiktorStribiżew看待这个问题的另一种方法是解析函数“如果有的话”的参数,如果我有一个参数数组,我将在找到的最后一个参数之后立即查找
    。您可以匹配您不想要的,但不需要的。你也可以用一个前瞻性的方法来假设外面。哦,不,我犯了一个错误哦,不,我犯了一个错误