regex 正则表达式用于圣经参考

cnjp1d6j  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(91)

我正在为一本在线圣经编写代码。我需要确定参考文献是什么时候写出来的。我已经看了所有通过stackoverflow和尝试各种regex的例子,但他们似乎都失败了与单一的书籍(如裘德),因为他们需要一个数字进行书名。以下是我目前的解决方案:

/((?:(I+|1st|2nd|3rd|First|Second|Third|1|2|3))?( )?(Gen|Ge|Gn|Exo|Ex|Exod|Lev|Le|Lv|Num|Nu|Nm|Nb|Deut|Dt|Josh|Jos|Jsh|Judg|Jdg|Jg|Jdgs|Rth|Ru|Sam|Samuel|Kings|Kgs|Kin|Chron|Chronicles|Ezra|Ezr|Neh|Ne|Esth|Es|Job|Job|Jb|Pslm|Ps|Psalms|Psa|Psm|Pss|Prov|Pr|Prv|Eccles|Ec|Song|So|Canticles|Song of Songs|SOS|Isa|Is|Jer|Je|Jr|Lam|La|Ezek|Eze|Ezk|Dan|Da|Dn|Hos|Ho|Joel|Joe|Jl|Amos|Am|Obad|Ob|Jnh|Jon|Micah|Mic|Nah|Na|Hab|Zeph|Zep|Zp|Haggai|Hag|Hg|Zech|Zec|Zc|Mal|Mal|Ml|Matt|Mt|Mrk|Mk|Mr|Luk|Lk|John|Jn|Jhn|Acts|Ac|Rom|Ro|Rm|Co|Cor|Corinthians|Gal|Ga|Ephes|Eph|Phil|Php|Col|Col|Th|Thes|Thess|Thessalonians|Ti|Tim|Timothy|Titus|Tit|Philem|Phm|Hebrews|Heb|James|Jas|Jm|Pe|Pet|Pt|Peter|Jn|Jo|Joh|Jhn|John|Jude|Jud|Rev|The Revelation|Genesis|Exodus|Leviticus|Numbers|Deuteronomy|Joshua|Judges|Ruth|Samuel|Kings|Chronicles|Ezra|Nehemiah|Esther|Job|Psalms|Psalm|Proverbs|Ecclesiastes|Song of Solomon|Isaiah|Jeremiah|Lamentations|Ezekiel|Daniel|Hosea|Joel|Amos|Obadiah|Jonah|Micah|Nahum|Habakkuk|Zephaniah|Haggai|Zechariah|Malachi|Matthew|Mark|Luke|John|Acts|Romans|Corinthians|Galatians|Ephesians|Philippians|Colossians|Thessalonians|Timothy|Titus|Philemon|Hebrews|James|Peter|John|Jude|Revelation))(([ .)\n|])([^a-zA-Z]))([\d])?([:\d])?([:\d])?/gi;

下面是正则表达式代码和一些要匹配的示例文本:https://regexr.com/5pfg3
在上面你会注意到,裘德,如果双倍行距将工作。如果我在后面画个句号就行了。我知道问题出在这一节:

(([ .)\n|])([^a-zA-Z]))

我想要的是匹配空格,括号,新行,但不是一个字母。

thtygnil

thtygnil1#

它不匹配,因为它期望使用(([ .)\n|])([^a-zA-Z]))的2个字符,其中第二个字符由于否定的字符类而不能是char a-zA-Z,因此它不能匹配Jude some中的s
如果您打算保留所有捕获组,则可以将第二部分中的字符类设置为可选。
您还可以添加字边界\b,以使模式的性能更好。
参见regex demo
(**注意***Jude 在交替中列出了两次)
如果你只想使用3个组,你可以把第一部分写成:

\b(?:(I+|1st|2nd|3rd|First|Second|Third|[123]) )?

第二部分将是名称的交替,在第三部分中,您可以匹配一个字符类,后跟数字部分,并将其作为一个可选的整体(因此您不会匹配没有数字的单词后面的尾随空格或字符)。

(?:[ .)\n|](\d+(?::\d+){0,2}\b))?

完整的图案看起来像

\b(?:(I+|1st|2nd|3rd|First|Second|Third|[123]) )?(Gen|Ge|Gn|Exo|Ex|Exod|Lev|Le|Lv|Num|Nu|Nm|Nb|Deut|Dt|Josh|Jos|Jsh|Judg|Jdg|Jg|Jdgs|Rth|Ru|Sam|Samuel|Kings|Kgs|Kin|Chron|Chronicles|Ezra|Ezr|Neh|Ne|Esth|Es|Job|Job|Jb|Pslm|Ps|Psalms|Psa|Psm|Pss|Prov|Pr|Prv|Eccles|Ec|Song|So|Canticles|Song of Songs|SOS|Isa|Is|Jer|Je|Jr|Lam|La|Ezek|Eze|Ezk|Dan|Da|Dn|Hos|Ho|Joel|Joe|Jl|Amos|Am|Obad|Ob|Jnh|Jon|Micah|Mic|Nah|Na|Hab|Zeph|Zep|Zp|Haggai|Hag|Hg|Zech|Zec|Zc|Mal|Mal|Ml|Matt|Mt|Mrk|Mk|Mr|Luk|Lk|John|Jn|Jhn|Acts|Ac|Rom|Ro|Rm|Co|Cor|Corinthians|Gal|Ga|Ephes|Eph|Phil|Php|Col|Col|Th|Thes|Thess|Thessalonians|Ti|Tim|Timothy|Titus|Tit|Philem|Phm|Hebrews|Heb|James|Jas|Jm|Pe|Pet|Pt|Peter|Jn|Jo|Joh|Jhn|John|Jude|Jud|Rev|The Revelation|Genesis|Exodus|Leviticus|Numbers|Deuteronomy|Joshua|Judges|Ruth|Samuel|Kings|Chronicles|Ezra|Nehemiah|Esther|Job|Psalms|Psalm|Proverbs|Ecclesiastes|Song of Solomon|Isaiah|Jeremiah|Lamentations|Ezekiel|Daniel|Hosea|Joel|Amos|Obadiah|Jonah|Micah|Nahum|Habakkuk|Zephaniah|Haggai|Zechariah|Malachi|Matthew|Mark|Luke|John|Acts|Romans|Corinthians|Galatians|Ephesians|Philippians|Colossians|Thessalonians|Timothy|Titus|Philemon|Hebrews|James|Peter|John|Revelation)\b(?:[ .)\n|](\d+(?::\d+){0,2}\b))?

Regex demo of the full pattern

zd287kbt

zd287kbt2#

这是我的资料仅需要前4个字符:
r"[1-3AC-JL-PR-TZ][ Ia-cehim-prsuxz][ CIJKPSTa-eg-ik-pr-v][ JKSabdeg-iklnor-v][ JKSac-ehik-or-u]?[ adeg-ik-pr-uw]?[ JKSa-cefg-il-pr-uw]?[ JKSaeghiklnos-u]?[Sacehil-osy]?[ghil-os-u]?[aeglnsuy]?[eilnos]?[alms]?[no]?[ns]?"

相关问题