c# - 使用正则表达式抓取多个匹配的字符串
问题描述
我正在创建一个程序,该程序使用以下正则表达式获取给定文档中的所有名称。
string pattern = @"(?<=Name)[\s](.*?)[\s]";
但是,如果文档中有名称但在不同的上下文中使用,则此正则表达式将不起作用。因此,我在下面修改了我的代码。
string pattern @"(?<=Name:[\s])(.*?)[\s]";
然而,即使这个正则表达式有效,它也只运行一次并输出它找到的第一个名称,这与显示的第一个正则表达式不同
已编辑 ——— 文档有一系列名称,例如 姓名:约翰 姓名:简 姓名:玛丽
下面会有一个句子,但是使用了名称这个词,我想要的只是名称后面的单词:在整个文档中被抓取。
我用来触发输出的是:
If (MatchesPattern.success)
{
RegexWriter(pattern.value, fileName)
}
解决方案
我猜,
^Name:\s*(\S+)\s*$
可能会奏效。
测试
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string pattern = @"^Name:\s*(\S+)\s*$";
string input = @"Name: John
Name: Jane
Name: Mary
a sentence here with name in it would be fine. ";
RegexOptions options = RegexOptions.Multiline;
foreach (Match m in Regex.Matches(input, pattern, options))
{
Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
}
}
}
C# 演示
如果您想简化/修改/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。
正则表达式电路
jex.im可视化正则表达式:
推荐阅读
- javascript - 将类添加到javascript中的最后四个“a”元素
- javascript - `==` 仍然被称为“抽象相等运算符”吗?
- python - 根据 csv 中的图像标签创建子文件夹
- android - 如何映射 StateFlow 值并通过数据绑定将其传递给视图
- service-accounts - 如何解决 Sage Error 3004 文件系统错误?
- excel - Power Query 中的相对源文件引用
- azure - 使用图形 API 配置 GCP 的 Azure AD saml 配置“登录 URL”
- blazor - 您如何使用 Blazor WebAssembly 开发 PWA 以更快地查看您对离线模式的更改?
- r - 如何确保参数是按名称而不是按位置调用的?
- arrays - 使用 for 循环对 MATLAB 中的错误事件进行排序?