我是一个新的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); 它适用于单行标头,但不适用于两行/多行标头。有人能帮忙吗?
发布于 2016-09-01 05:09:01
我不熟悉C#样式regex,但是.不是任何字符匹配(除了新行)吗?
如果您需要新的行,那么您还必须在最后包含一个实际的\n,可能还有一个?,除非您也计划有一个替代方案。
但我有点惊讶的是,这个正则表达式并没有引起任何问题,除非书的格式非常完美。
发布于 2016-09-01 05:20:48
假设您已经在单个字符串中获得了所需的目录,唯一的问题是解析第二级标题。
正则表达式修改为只匹配大写字母。
您可以使用以下代码实现所需的结果:
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#正则表达式。
https://stackoverflow.com/questions/39262966
复制相似问题