我正在尝试使用regex搜索字符串。以下是文本可视化工具中字符串的外观:

0 -12.67 Td
/Helv 14 Tf
(Source: ABC / XYZA) Tj
0 -15.624 Td
(Job Source No.: GRQX ID 27299) Tj
0 -15.624 Td

当我将鼠标悬停在该值上查看该值时:
0 -12.67 Td\n/Helv 14 Tf\n(Source: ABC / XYZA) Tj\n0 -15.624 Td\n(Job Source No.: GRQX ID 27299) Tj\n0 -15.624 Td

我使用的Regex.Matches()模式如下:
^(?<=[(]).+(?=[)])

这将不返回匹配项。当我省略插入符号时,如下所示:
(?<=[(]).+(?=[)])

然后RegexOptions.Multiline返回两个匹配项:
Source: ABC / XYZA
Job Source No.: GRQX ID 27299

我怎样才能匹配一行中的第一个字符?

最佳答案

regex模式中的lookbehind检查当前位置左侧的字符,因此在模式中^(?<=[(])要求(位于^之前(行首)。在行首之前,要么没有任何内容(在字符串的开头),要么有一个换行符。因此,它永远不会匹配任何字符串。
实际上,您不需要任何lookaround来获取所需的子字符串。使用以下带有RegexOptions.Multiline选项的正则表达式:

^\(([^()]+)\)

^将确保匹配出现在字符串的开头,([^()]+)将捕获到组1中()以外的一个或多个字符,然后)将得到匹配。
查看regex demo,您需要的结果在组1中。
c# - RegexOptions.Multiline似乎忽略了\n-LMLPHP
在C_中,使用以下代码:
var res = Regex.Matches(str, @"^\(([^()]+)\)", RegexOptions.Multiline)
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();

08-19 11:02