我正在尝试使用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_中,使用以下代码:
var res = Regex.Matches(str, @"^\(([^()]+)\)", RegexOptions.Multiline)
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();