【问题标题】:Regex to search for words containing foreign characters正则表达式搜索包含外来字符的单词
【发布时间】:2016-03-02 06:42:53
【问题描述】:

我正在寻找一个在 Notepad++ 中使用的 RegEx,它可以挑选出带有外来词的行。我的策略是尝试捕捉包含外来字符的单词。例如,如果我想找到大写的希腊单词,我已经接近了

^(?< ![a-z0-9]).+\[ΓΣΩΘΦΔΛΠ\](?!=a-z0-9)+$

它试图找到这些大写希腊字母中的任何一个,在小写字母和数字的两侧都有负面的外观,但它不起作用。

如果我制作了一个有效的表达线,例如:

1. BUTTER ΘEΦECOC EGGS
2. Flour CREAM sugar
3. AΘINA HELLAΣ ΠOΘCON

应该只匹配第 1 行和第 3 行,因为第 2 行没有带有希腊字母的单词。

【问题讨论】:

  • 也许 [^a-zA-Z\s0-9\.\;\:\,]
  • "Foreign" 不是一个确切的术语 :) 例如,字母 'k' 只出现在意大利语的 'foreign' 单词中。也许您的意思是“常规 ASCII 集之外的字符”?

标签: regex notepad++ unicode-string


【解决方案1】:

只要您知道非英语单词也可以采用[a-z]+ 的形式,您就可以使用\pL 匹配带有Unicode 通用类别字母中的代码点的单词。

匹配线:

(?i).*(?![a-z])\pM*\pL.*

匹配词:

(?i)\b[a-z]*(?![a-z])\pM*\pL\w*

说明

  • (?i) 无大小写匹配。
  • \b 是一个 word boundary,用于匹配单词的开头。
  • [a-z]* 匹配单词中可能出现在非英文字母之前的英文字母。
  • (?![a-z])\pM*\pL 使用negative lookahead 断言下一个字符不是英文字母,然后匹配Unicode General Category Letter 中的代码点,可能前面有一个变音符号。
  • \w* 匹配任何其他单词字符。

【讨论】:

    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多