Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 - Fatal编程技术网

C# 正则表达式匹配附近的文本(<;匹配术语>;)

C# 正则表达式匹配附近的文本(<;匹配术语>;),c#,regex,C#,Regex,我有一个案例,我需要匹配这个特定案例中的所有文本 NEAR(<everything inside>) 这里的主要问题是,near(…)子字符串是否会出现在作为关键字参数的字符串中。如果我们假设它没有出现在那里,我们可以使用正则表达式 假设“可以用另一个”转义的示例模式(类似SQL的方式): near\(((?>[^()“]+)*(?:[^“]|”)*“(?)\((?)\)*(?(c)(?!)\) 使用“以反斜杠转义: near\((?>[^()”]+|“[^”\]*(?:\\(?

我有一个案例,我需要匹配这个特定案例中的所有文本

NEAR(<everything inside>)

这里的主要问题是,
near(…)
子字符串是否会出现在作为关键字参数的字符串中。如果我们假设它没有出现在那里,我们可以使用正则表达式

假设
可以用另一个
转义的示例模式(类似SQL的方式):

near\(((?>[^()“]+)*(?:[^“]|”)*“(?)\((?)\)*(?(c)(?!)\)
使用
以反斜杠转义:

near\((?>[^()”]+|“[^”\]*(?:\\(?s:)[^“\\]*)*”(?)\((?)\)*((c)(?!)\)
请参阅和

详细信息

  • near\(
    -
    near(
    string
  • (?>[^()”]+|“(?:[^“]|”)*“|(?)\(|(?)\)*
    -零次或多次出现
    • [^()”]+
      -一个或多个字符,而不是
    • |
      -或
    • “(?:[^”]|”“)*”
      -一个
      ”,然后是除
      以外的零个或多个字符,然后是一个
      字符
    • “[^”\]*(?:\(?:)[^”\]*)*”
      -
      ”和
      \
      之外的零个或多个字符,然后是任何转义字符的零个或多个重复,然后是
      \
      之外的零个或多个字符,然后是
      字符
    • |
      -或
    • (?)\(
      -将值推送到组“c”堆栈上,并匹配
    • |
      -或
    • (?)\)
      -从组“c”堆栈中弹出一个值,然后匹配
  • (?(c)(?!)
    -如果组“c”堆栈不为空,则匹配失败
  • \)

您真的需要
regex
来解决此问题吗?如果所有输入数据都具有格式
near()
,然后您可以通过使用
字符串
函数,如
子字符串
索引
来解决这个问题。对不起,我应该更明确地说明这个问题。
是可选的,真正的搜索字符串将比这个复杂得多。因此,我们的想法是在
附近的
中查找匹配项
搜索所有
()
并用一些特殊字符替换(针对我的特定用例)示例:
((保管人:(andrea_ring_000_1_1或andrew_lewis_000_1)数据集:Benjamin文件夹:“其他文档”)(描述:一个EDTID:2个标记:“标记父项1”)((数据集:Benjamin或文档集:(aaa和sdcsadc))标记:“标记父1”和附近((弗雷德,车),3)
问题是当
near
表达式不在双引号中时,是否需要使
regex
工作?@lliar是的,因为搜索字符串可能包含多个
near
,其中有多个双引号或括号。带嵌套括号的语言是不规则的,因此基本regex是一个非常糟糕的工具用于解析。使用或编写能够识别括号和字符串的基本解析器更容易、更易于维护并且(可能)更高效。谢谢,这正是我想要的
near((fred, car),3)
near(("john smith", "(adam eve)"),3)
near(("term 1","term 2","term 3","(term 4)"),5)
near((fred, car),3) OR near(("john smith", "(adam eve)"),3) AND near(("term 1","term 2","term 3","(term 4)"),5)