如何在Haskell中查找和替换Unicode字符?

路德维格

我在MediaText标记中包含一个(瑞典)维基百科文章的unicode文件。我想清除所有标记。在某些情况下,我想从标记标签中提取文本,例如超链接的链接标题(如简化的wikiextractor)。

我的方法是在文件上运行一组正则表达式以删除标记。在链接示例中,我需要替换[[link]]link只要文本不包含Unicode字符(例如),我就可以使用正则表达式很好地解决此问题ö

我尝试过的示例:

ghci> :m +Data.Text
ghci> subRegex (mkRegex "\\[\\[([() a-zA-Z]*)\\]\\]") "Se mer om [[Stockholm]]" "\\1"
"Se mer om Stockholm"
ghci> subRegex (mkRegex "\\[\\[([() a-zA-Z]*)\\]\\]") "Se mer om [[Göteborg]]" "\\1"
"Se mer om [[G\246teborg]]"

为什么这不起作用?如何使正则表达式引擎意识到这ö确实是一个普通字母(至少在瑞典语中如此)?

编辑:问题似乎并不真正存在于模式中,而是在引擎中。如果我允许除q链接文本外的所有字符,则ö可以允许。但是不是...

ghci> subRegex (mkRegex "\\[\\[([^q]*)\\]\\]") "[[Goteborg]]" "\\1"
"Goteborg"
ghci> subRegex (mkRegex "\\[\\[([^q]*)\\]\\]") "[[Göteborg]]" "\\1"
"[[G\246teborg]]"
ghci> subRegex (mkRegex "ö") "ö" "q"
"q"
ghci> subRegex (mkRegex "[ö]") "ö" "q"
"\246"

使用字符类时,该问题似乎特别出现。ö本身就可以匹配

路德维格

我现在决定按照作者写的SO Answer中的建议使用Text.Regex.PCRE.Heavy 它解决了我的问题。

因此,解决方案成为

GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> :m Text.Regex.PCRE.Heavy
Prelude Text.Regex.PCRE.Heavy> :set -XFlexibleContexts
Prelude Text.Regex.PCRE.Heavy> :set -XQuasiQuotes
Prelude Text.Regex.PCRE.Heavy> gsub [re|\[\[([^\]]*)\]\]|] (\(firstMatch:_) -> firstMatch :: String) "[[Göteborg]]" :: String
"G\246teborg"

不幸的是,我仍然不知道为什么POSIX后端不能处理这个,但是PCRE后端可以处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在NSString中查找特定的unicode字符并将其替换为非unicode字符?

如何在Excel中查找和替换字符“ *”

如何在字符串中查找和替换'['?

如何在字符之间查找和替换

如何使用Python使用Unicode编码查找和替换* .txt文件中的字符串?

如何在节中的字符串中查找和替换字符?

如何在Vim中查找和替换#个(磅)字符的字符串?

如何在awk中使用gsub查找和替换文件中的(“ ./”)和(“ .txt”)字符

在Haskell中查找字符的Unicode脚本

TextPad Regex:如何在尖括号中查找和替换字符?

如何在单元格的Excel文本值中查找和替换字符“ *”,而不是公式

如何在 ac# 字符串中查找和替换以值开头的标记

如何在 sql phpmyadmin 中查找和替换字符串?

如何在 LibreOffice Calc 中查找和替换包含通配符的字符串?

如何在没有sed的文件中查找和替换字符串

如何在Java中替换不可打印的Unicode字符?

如何在Dart中替换Unicode转义字符

如何在每个特定行中查找/替换字符

如何在Perl Pie中处理特殊字符查找替换

如何使用python查找和替换嵌套列表中的字符?

如何查找和替换字符向量中的数字行?

如何查找和替换特定字符(但仅在引号中)?

如何查找和替换应用脚本中的字符?

如何在批处理文件中的变量中查找和替换%PATH%系统变量中的字符串?

如何在Excel中查找和替换多个值?

如何在PowerShell中查找和替换文件内容?

如何在XML中查找和替换属性值

如何在Jupyter Lab中查找和替换

如何在Shell脚本中查找和替换文本