我正在尝试使用正则表达式搜索字符串。这是字符串在文本可视化工具中的样子:
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
我正在使用具有以下模式和 RegexOptions.Multiline
的 Regex.Matches()
:
^(?<=[(]).+(?=[)])
这不会返回任何匹配项。当我省略插入符号时,像这样:
(?<=[(]).+(?=[)])
然后 Regex.Matches()
返回两个匹配项:
Source: ABC / XYZA
Job Source No.: GRQX ID 27299
如何匹配一行中的第一个字符?
最佳答案
正则表达式模式中的后视检查当前位置左侧的字符,因此在您的模式中 ^(?<=[(])
需要 (
在 ^
之前(一行的开头)。在一行的开头之前,要么什么都没有(在字符串的开头),要么有一个换行符。因此,它永远不会匹配任何字符串。
实际上,您不需要任何环视来获取所需的子字符串。将以下正则表达式与 RegexOptions.Multiline
结合使用选项:
^\(([^()]+)\)
^
将确保匹配出现在字符串的开头,([^()]+)
将捕获第 1 组中除 (
之外的一个或多个字符和 )
, 然后 )
将得到匹配。
参见 regex demo ,您需要的结果在第 1 组中。
在 C# 中,使用以下代码:
var res = Regex.Matches(str, @"^\(([^()]+)\)", RegexOptions.Multiline)
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();
关于c# - RegexOptions.Multiline 似乎忽略\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661309/