gpt4 book ai didi

c# - RegexOptions.Multiline 似乎忽略\n

转载 作者:太空狗 更新时间:2023-10-30 01:31:36 26 4
gpt4 key购买 nike

我正在尝试使用正则表达式搜索字符串。这是字符串在文本可视化工具中的样子:

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.MultilineRegex.Matches():

^(?<=[(]).+(?=[)])

这不会返回任何匹配项。当我省略插入符号时,像这样:

(?<=[(]).+(?=[)])

然后 Regex.Matches() 返回两个匹配项:

Source: ABC / XYZA
Job Source No.: GRQX ID 27299

如何匹配一行中的第一个字符?

最佳答案

正则表达式模式中的后视检查当前位置左侧的字符,因此在您的模式中 ^(?<=[(])需要 (^ 之前(一行的开头)。在一行的开头之前,要么什么都没有(在字符串的开头),要么有一个换行符。因此,它永远不会匹配任何字符串。

实际上,您不需要任何环视来获取所需的子字符串。将以下正则表达式与 RegexOptions.Multiline 结合使用选项:

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

^将确保匹配出现在字符串的开头,([^()]+)将捕获第 1 组中除 ( 之外的一个或多个字符和 ) , 然后 )将得到匹配。

参见 regex demo ,您需要的结果在第 1 组中。

enter image description here

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com