c#多行标头的正则表达式
本文关键字:正则表达式 | 更新日期: 2023-09-27 18:05:09
我是一个新的c#程序员。我想做一个简单的c#应用程序,它将从pdf文件(书)中提取标题,如果它们是这种格式:
1.1电气/电子工业
1.2简史
1.3计量单位
我使用的代码是:
string pattern = @"('d+)('.)('d+) ([A-Z]+).([A-Z]+).([A-Z]+).([A-Z]+).([A-Z]+)";
Regex.match(strText,pattern);
对于单行标头很好,但对于两行/多行标头不起作用。有谁能帮忙吗?
我不熟悉c#风格的正则表达式,但不是.
的任何字符匹配(除了新行)?
如果您需要新的行,那么您还必须在末尾包含一个实际的'n
,可能也包含?
,除非您计划还有其他选择。
但我有点惊讶,这个正则表达式没有引起任何问题,除非书的格式恰好是完美的。
假设您已经在单个字符串中获得所需的目录表,唯一的问题是解析二级标头。
修改为只匹配大写字母的正则表达式。
您可以使用以下代码实现所需的结果:
string pattern = @"(('d+'.'d+) ([A-Z's]+)'n)+";
var match = Regex.Match(input, pattern);
var headers = new List<string>();
for (var i = 0; i < match.Groups[1].Captures.Count; i++)
{
headers.Add(match.Groups[1].Captures[i].Value);
}
之后的headers
将包含所有需要的数据。
假设input
包含输入数据。另外,请注意'n
是新行字符。
你的正则表达式简化了。
('d+'.'d+)
表示"一个或多个数字字符"、点、"一个或多个数字字符"、空格的序列。
([A-Z's]+)'n
- "一个或多个大写字母或空格","换行字符"
同样,阅读下面的文章来熟悉c#正则表达式。