[英]Remove all non-latin passages from a string with regex
我需要从字符串中删除所有包含非拉丁字符的段落,但与我见过的许多答案不同,我还想删除这些段落中的标点符号,同时在英文段落中保留相同的标点符号。
换句话说,当遇到一个非拉丁字符如“ָהּ”时,正则表达式将开始跳过包括ascii标点在内的所有内容,直到找到一个[a-zA-Z]字符。
我尝试了以下示例,但它错误地删除了“一半”后的引号,这让我相信我对非拉丁字符没有很好的定义。
[\ɐ-\][^a-zA-Z]*
这是输入文本的示例(已更新):
or perhaps, a - אוֹ דִילְמָא אֵין אִשָּׁה מִתְקַדְּשֶׁת לַחֲצָאִין כְּלָל (12);time
תֵּיקוּ
person cannot be in separate halves at all, even
though both "halves” would come together simultaneously?(13)
The speaker replies:(14)
结果字符串是:
or perhaps, a - time
person cannot be in separate halves at all, even
though both "halveswould come together simultaneously?(13)
The speaker replies:(14)
如您所见,它在第三行搞砸了。 显然,我可以排除那个特定的角色,但我担心它会在其他边缘情况下搞砸。
还有其他想法吗? (顺便说一句,我正在使用 Javascript)
替换任何非拉丁字母字符,该字符可选地后跟除[a-zA-Z]
之外的任意数量的字符和一个更多非拉丁字母字符。
要使用您自己的\ɐ-\
定义作为边界:
/[\u0250-\ue007]([^a-z]*[\u0250-\ue007])?/gis
我理解“非拉丁字符,例如הּ
”是指任何非 ASCII字母。
要匹配 ASCII 字母以外的任何字母,您可以使用[^\\P{L}a-zA-Z]
。 这是一个否定字符类,它匹配非字母字符 ( \\P{L}
) 和 ASCII 字母 ( a-zA-Z
) 以外的任何字符。 所以,它基本上是\\p{L}
模式,除了 ASCII 字母。
这个基于 Unicode 字符类的模式需要一个u
标志,由 Node.js JavaScript 环境支持。
解决方案看起来像
text = text.replace(/[^\P{L}a-z][^a-z]*/gui, '')
请注意g
标志使replace
替换字符串中的所有出现,而i
用于缩短 ASCII 字母模式(因为它使模式匹配不区分大小写)。
请参阅 JavaScript 演示:
const text = `or perhaps, a - אוֹ דִילְמָא אֵין אִשָּׁה מִתְקַדְּשֶׁת לַחֲצָאִין כְּלָל (12);time תֵּיקוּ person cannot be in separate halves at all, even though both "halves” would come together simultaneously?(13) The speaker replies:(14)`; console.log( text.replace(/[^\\P{L}az][^az]*/gui, '') )
输出:
or perhaps, a - time
person cannot be in separate halves at all, even
though both "halves” would come together simultaneously?(13)
The speaker replies:(14)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.