我尝试使用正则表达式搜索字符串。这是Text Visualizer中字符串的样子:
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
:
^(?<=[(]).+(?=[)])
这不返回任何匹配项。当我省略插入符号时,就像这样:
(?<=[(]).+(?=[)])
然后Regex.Matches()
返回两个匹配项:
Source: ABC / XYZA
Job Source No.: GRQX ID 27299
如何匹配一行中的第一个字符?
答案 0 :(得分:3)
正则表达式模式中的后视图检查当前位置左侧的字符,因此在您的模式中^(?<=[(])
要求(
位于^
之前({1}}线)。在行开始之前,没有任何内容(在字符串的开头),或者有换行符。因此,它永远不会匹配任何字符串。
实际上,您不需要任何外观来获取所需的子串。将以下正则表达式与RegexOptions.Multiline
选项一起使用:
^\(([^()]+)\)
^
会确保匹配项出现在字符串的开头,([^()]+)
会将除(
和)
以外的一个或多个字符捕获到第1组中,然后)
将匹配。
请参阅regex demo,您需要的结果在第1组中。
在C#中,使用以下代码:
var res = Regex.Matches(str, @"^\(([^()]+)\)", RegexOptions.Multiline)
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();