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

标签 c# 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

我正在使用具有以下模式和 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/

相关文章:

php 从字符串中提取一些数字

ruby - 根据之前的分组结果对正则表达式进行分组

php - preg_match 获取文本

c# - 用C#中的正则表达式替换连接字符串中的密码

c# - 在这种情况下如何使用模拟?

c# - 异常 : Ambiguous column name

c# - 在重写模板方法中访问中间类属性

c# - 将 null 传递给 Interop 方法时,它会抛出 "Generic types cannot be marshaled."异常

java - 从字符串中删除一组特殊字符

c# - 为每个值返回单个值的 Linq 查询 “where [column] in (list of values)”?