如何使用正则表达式解析 MARC 记录?
How can I parse MARC records with a Regular Expression?
我想用正则表达式解析 MARC 记录,return 字段作为第一个捕获组,值作为第二个捕获组。这是我到目前为止对正则表达式的了解:
(\n[0-9]{3})[ 0-9]{4}([^\n]*)
那里的最后一个捕获组 ([^\n]*)
正在捕获下一个换行符之前的所有内容,这适用于以下行:
001 868229892
100 1 Montgomery, L. M.|q(Lucy Maud),|d1874-1942.,|eauthor.
245 10 Anne of Green Gables /|cL.M. Montgomery.
250 Aladdin hardcover edition.
264 1 New York :|bAladdin,|c2014.
300 440 pages ;|c22 cm
336 text|2rdacontent.
337 unmediated|2rdamedia.
338 volume|2rdacarrier.
但是,对于跨行的值,正则表达式不再有效:
520 Anne, an eleven-year-old orphan, is sent by mistake to
live with a lonely, middle-aged brother and sister on a
Prince Edward Island farm and proceeds to make an
indelible impression on everyone around her.
650 0 Shirley, Anne (Fictitious character)|vJuvenile fiction.
下一站应该是上面的650
。因此,正则表达式应该捕获所有内容,直到 一个换行符后跟 3 个数字 。
我确实尝试了 ([^\n0-9]*)
,但这被解释为匹配除数字或换行符以外的任何内容 以任何顺序 。我需要它来匹配一个换行符和 3 个数字 在那个确切的序列 .
在末尾添加否定前瞻以确保换行符后跟 3 位数字。还可以做一些事情来缩短正则表达式。
(\n\d{3})[ \d]{4}((?:(?!\n\d{3}).)*)
这个正则表达式,如 regex101 所示:
(\n[0-9]{3})[ 0-9]{4}([^\n]+(?:\n\s+[^\n]+)*)
捕获组 ([^\n]+(?:\n\s+[^\n]+)*)
匹配
- 任何非换行符:
[^\n]+
- 然后任意数量的额外行:
(?:\n\s+[^\n]+)*
我想用正则表达式解析 MARC 记录,return 字段作为第一个捕获组,值作为第二个捕获组。这是我到目前为止对正则表达式的了解:
(\n[0-9]{3})[ 0-9]{4}([^\n]*)
那里的最后一个捕获组 ([^\n]*)
正在捕获下一个换行符之前的所有内容,这适用于以下行:
001 868229892
100 1 Montgomery, L. M.|q(Lucy Maud),|d1874-1942.,|eauthor.
245 10 Anne of Green Gables /|cL.M. Montgomery.
250 Aladdin hardcover edition.
264 1 New York :|bAladdin,|c2014.
300 440 pages ;|c22 cm
336 text|2rdacontent.
337 unmediated|2rdamedia.
338 volume|2rdacarrier.
但是,对于跨行的值,正则表达式不再有效:
520 Anne, an eleven-year-old orphan, is sent by mistake to
live with a lonely, middle-aged brother and sister on a
Prince Edward Island farm and proceeds to make an
indelible impression on everyone around her.
650 0 Shirley, Anne (Fictitious character)|vJuvenile fiction.
下一站应该是上面的650
。因此,正则表达式应该捕获所有内容,直到 一个换行符后跟 3 个数字 。
我确实尝试了 ([^\n0-9]*)
,但这被解释为匹配除数字或换行符以外的任何内容 以任何顺序 。我需要它来匹配一个换行符和 3 个数字 在那个确切的序列 .
在末尾添加否定前瞻以确保换行符后跟 3 位数字。还可以做一些事情来缩短正则表达式。
(\n\d{3})[ \d]{4}((?:(?!\n\d{3}).)*)
这个正则表达式,如 regex101 所示:
(\n[0-9]{3})[ 0-9]{4}([^\n]+(?:\n\s+[^\n]+)*)
捕获组 ([^\n]+(?:\n\s+[^\n]+)*)
匹配
- 任何非换行符:
[^\n]+
- 然后任意数量的额外行:
(?:\n\s+[^\n]+)*