正则表达式-转义符

时间:2019-10-08 03:55:47

标签: .net regex

我有这个正则表达式:(?:\[|\G(?!^))('[^']+?')\s*,?\s*(?=[^\]]*?\]),它仅匹配方括号(如数组)中引号之间的内容:['Foo','Bar'] =>返回'Foo' 'Bar'

问题在于,在这种情况下,单引号是一个特殊字符,因为正则表达式将其用作定界符,但有时我需要将值内的单引号作为转义字符传递:{{1 }}。

我正在尝试通过使不捕获的['F'oo', 'B'ar']组适应正则表达式来做类似'F \'oo'的事情,但是它不起作用,我尝试了许多不同的方法。

此非捕获组正则表达式来自此answer,在此他成功使用反斜杠转义了特殊字符。

我将C#与.NET Core一起使用。

全文如下:(?:(?=(\\?))\1.)

如何解决?

3 个答案:

答案 0 :(得分:3)

有一个similar question already用于获取引号的转义字符。我更喜欢this answer

将捕获部分('[^']+?')更改为('[^\\']*(?:\\.[^\\']*)*')。您可以进一步删除懒惰的量词,这在已经使用否定类的情况下不会有多大区别。

可能有必要另外进行escaping of the backslash

答案 1 :(得分:2)

您也许可以使用

(?:\[|\G(?!\A))
('.+?')
(?:(?:\s*,\s*)|\])

请参见a demo on regex101.com

答案 2 :(得分:0)

我的猜测是,

(?<=\[|,)\s*'(.*?)'\s*(?=\]|,)

或类似的表达式可能行得通。

Demo

测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=\[|,)\s*'(.*?)'\s*(?=\]|,)";
        string input = @"['Foo', 'Bar']
['F'oo', 'B'ar']
['F'oo', 'B'ar','Foo', 'Bar']";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

RegEx电路

jex.im可视化正则表达式:

enter image description here