以下正则表达式允许您在 Paratext 的“查找”功能中使用 Remove From List(从列表中移除),来比较两个项目中带有神圣名称标记 \nd …\nd* 的经文,以查看哪些经文中实例的数量不同。设置需要没有任何限制。如果勾选了 Match Only in Verse Text(仅匹配经文文本),它将无法工作。
regex:(?<=\\v\s\S+\s)((?!\\(v|m?s|nd)).)*(\\nd [^\\]*?\\nd\*)){1,1}((?!\\(v|m?s|nd|c)).)*(?=\\(v|s|c)|\Z)
此正则表达式允许您查找文本中包含指定数量 \nd 跨度的经文:
- {1,1} 仅一个
- {1} 恰好一个(与上述相同)
- {2,} 两个或更多
- {0,0} 无
它不会查找章节标题中的 \nd 标记,也不会查找 \+nd 标记
问题
- 由于它不会查找 \+nd 标记,因此它不会查找普通文本中的 \+nd(罕见)。
- 它不会查找跟随在章节标题之后的部分经文中的 \nd(罕见)。
以下正则表达式将查找普通文本和脚注中 \+nd …\+nd* 跨度内的 txt。
regex:(?<=\\v\s\S+\s)(((?!\\(v|m?s|\+nd)).)*(\\\+?nd [^\\]*?\\\+?nd\*)){1,1}((?!\\(v|m?s|\+nd)).)*(?=\\(v|m?s)|\Z)
问题
- 由于它会查找 \+nd 标记,因此它会查找脚注中的 \+nd(常见)。
如果我们想使用此功能来比较使用 \nd 标记的英文翻译和使用唯一无标记单词表示 YHWH 的翻译,我们可以将该单词添加到查找中。对于法语,我们将查找 Eternel
regex:(?<=\\v\s\S+\s)(((?!\\(v|m?s|nd)|Eternel).)*(\\\+?nd [^\\]*?\\\+?nd\*|Eternel)){1,1}((?!\\(v|m?s|nd)|Eternel).)*(?=\\v|m?s)|\Z)
由于 Eternel 也出现在脚注中,我们希望跳过查找脚注中的文本。以下模式(Schema)允许您在匹配时跳过文本(例如脚注跨度):
schema:(?<=<start>)(((?!<selector>).)*((<skipSpan>((?!<selector>).)*)*<requiredSpan>)){Min,Max}((?!<selector>).)*(<skipSpan>((?!<selector>).)*)*(?=<end>|\Z)
关于 <selector>,请参阅:正则表达式示例:匹配满足特定要求的整行文本
如果您的条件是某行不应包含某些内容,请使用负向前瞻。^((?!regexp).)*$ 匹配一个不匹配 regexp 的完整行。
让我们将此应用于跳过脚注中的文本。我们需要匹配 \nd 和 \+nd 跨度以及 Eternel:
<start> \\v\s\S+\s ; Start at verse
<end> \\(v|m?s) ; End at verse or section heading
<end>|\Z \\(v|m?s)|\Z ; For final context add \Z to select end of Chapter
<requiredStart> \\\+?nd|Eternel ; \nd markup optionally embedded and "Eternel"
<requiredSpan> (\\\+?nd [^\\]*?\\\+?nd\*|Eternel) ; The entire \nd phrase or "Eternel"
<skipStart> \\f\s ; Beginning of a footnote
<skipSpan> (\\f\s((?!\\f\*).)*\\f\*) ; The entire footnote
<selector> <end>|<skipStart>|<requiredStart> ; Combine all of the selection restrictions
=> \\(v|m?s)|\\f\s|\\\+?ndEternel ; which simplifies to
=> \\(v|m?s|f\s|\+?nd)|Eternel
完整正则表达式:
regex:(?<=\\v\s\S+\s)(((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*(((\\f\s((?!\\f\*).)*\\f\*)((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*)*(\\\+?nd[^\\]*?\\\+?nd\*|Eternel))){1,1}((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*((\\f\s([^\\]|\\(?!f\*))*\\f\*)((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*)*(?=(\\(v|m?s))|\Z)
The following Regex will allow you to compare two projects with the divine name markup \nd …\nd* in Paratext Find and using Remove From List, to see where the number of instances in a verse differ. Settings need to be without any restrictions. It will not work if Match Only in Verse Text is checked.
regex:(?<=\\v\s\S+\s)((?!\\(v|m?s|nd)).)*(\\nd [^\\]*?\\nd\*)){1,1}((?!\\(v|m?s|nd|c)).)*(?=\\(v|s|c)|\Z)
This regex allows you to find verses with a specified number of \nd spans in the text:
- {1,1} one and only one
- {1} exactly one (same as above)
- {2,} two or more
- {0,0} None
It does not find \nd markup in section headings nor will it find \+nd markup
Issues
- Since it will not find \+nd markup it will not find \+nd in regular text (rare).
- It will not find \nd in a partial verse that follows a section heading (rare).
The following Regex will find txt in \+nd …\+nd* spans in regular text and footnotes: .
regex:(?<=\\v\s\S+\s)(((?!\\(v|m?s|\+nd)).)*(\\\+?nd [^\\]*?\\\+?nd\*)){1,1}((?!\\(v|m?s|\+nd)).)*(?=\\(v|m?s)|\Z)
Issues
- Since it will find \+nd markup it will find \+nd in footnotes (common).
If we want to use this to compare an English translation that uses \nd markup with a translation that uses a unique unmarked word for YHWH, we can add the word to the find. For French we will look for Eternel
regex:(?<=\\v\s\S+\s)(((?!\\(v|m?s|nd)|Eternel).)*(\\\+?nd [^\\]*?\\\+?nd\*|Eternel)){1,1}((?!\\(v|m?s|nd)|Eternel).)*(?=\\v|m?s)|\Z)
Since Eternel also occurs in footnotes we want to skip finding the text in footnotes. The following Schema will allow you skip text (such as a footnote span) when matching:
schema:(?<=<start>)(((?!<selector>).)*((<skipSpan>((?!<selector>).)*)*<requiredSpan>)){Min,Max}((?!<selector>).)*(<skipSpan>((?!<selector>).)*)*(?=<end>|\Z)
For the <selector> see: Regex Examples: Matching Whole Lines of Text That Satisfy Certain Requirements
If your condition is that a line should not contain something, use negative lookahead. ^((?!regexp).)*$ matches a complete line that does not match regexp.
Let’s apply this to skipping text in footnotes. We are required to match \nd and \+nd spans and Eternel:
<start> \\v\s\S+\s ; Start at verse
<end> \\(v|m?s) ; End at verse or section heading
<end>|\Z \\(v|m?s)|\Z ; For final context add \Z to select end of Chapter
<requiredStart> \\\+?nd|Eternel ; \nd markup optionally embedded and "Eternel"
<requiredSpan> (\\\+?nd [^\\]*?\\\+?nd\*|Eternel) ; The entire \nd phrase or "Eternel"
<skipStart> \\f\s ; Beginning of a footnote
<skipSpan> (\\f\s((?!\\f\*).)*\\f\*) ; The entire footnote
<selector> <end>|<skipStart>|<requiredStart> ; Combine all of the selection restrictions
=> \\(v|m?s)|\\f\s|\\\+?ndEternel ; which simplifies to
=> \\(v|m?s|f\s|\+?nd)|Eternel
Complete regex:
regex:(?<=\\v\s\S+\s)(((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*(((\\f\s((?!\\f\*).)*\\f\*)((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*)*(\\\+?nd[^\\]*?\\\+?nd\*|Eternel))){1,1}((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*((\\f\s([^\\]|\\(?!f\*))*\\f\*)((?!\\(v|m?s|f\s|\+?nd)|Eternel).)*)*(?=(\\(v|m?s))|\Z)
机器翻译自 English