2017-06-03 66 views
-3

我需要的,如果给定的文本是英文还是不能够检测一个正则表达式,但我要包括以下内容:英语正则表达式在C#

  • 允许空间
  • 允许数字和文字
  • 允许多个线和标签
  • 允许所有特殊字符@#$%^ * &()_- + = {} |/<>〜`“:”[]
  • 允许的URL,邮件
  • 如果给定的文本包含任何字符而不是英文,则应该将其视为非英文文本,如果文本包含阿拉伯字母/单词(如“ابت...等”),并且相同法语“é,â€等”以及所有其他语言

简而言之,我需要知道给定的文本(任何格式的文本)是否使用英文。我尝试了很多模式,但我没有得到它,实际上,我不需要使用任何语言检测器,因为应用程序将脱机使用。文本的

样品不应被接受:

您好! ... E

مرحبابك

للتحميلاضغطهنا... http://www.google.com

所以,如果文本中包含非英文字母,它应被视为非英语文本。

+0

顺便说一句,我尝试使用以下模式 “\ p {IsArabic}”,“^ [A- zA-Z0-9&。\:/ - ] + $“,”^ [\ x20- \ x7E] + $“,”[A-Za-z0-9。, - = +(){}!@#$ %^&* _ [\] \\]“...但是都给了我不正确的结果。 –

+2

咖啡厅虽然是一个英文单词,但许多语言的文字都是用英文表示的字符......无论如何,请查看Unicode类别。您可以检查不是a-z的字母字符。 – Ryan

+5

你正在从正则表达式中请求waaaaay太多,并且在一定程度上简化了对语言的检测。 ***这不是正则表达式。***真的。为什么不加载[英文单词列表](http://www-01.sil.org/ linguistics/wordlists/english/wordlist/wordsEn.txt)并比较文字中有多少单词是匹配的? – spender

回答

0

我想我找到了它,我尝试了基本拉丁Unicode类别,到目前为止效果很好。我用:

"^[\u0000-\u007F]+$" 

它的想法是检查,如果给定的文本是英文,并且只使用英文字母,除写的,它允许特殊字符。因此,如果给定的文本是这样的“我在咖啡馆遇见了我的朋友”,它被认为是非英文文本,因为给定的文本应该只包含英文字母,并且即使键入名字,地方也避免任何其他字母。 ..等等,这正是我需要的。
谢谢大家。


资源:

0

这应该工作:

@"[^\t\w\d\s$-/:-?{-~!"^_`\[\]]+" 

如果有匹配,也有非英文字母/字符。

顺便说一句,你只是测试,如果文本只包含那些说英语的人通常会使用的字符,而不是它是什么语言。 要检测一种语言,你需要像自然语言处理但不是正则表达式的东西。

+0

我相信'\ s'已经匹配tab(和空格/换行符),并且'\ w'已经和数字匹配了,所以你不需要'\ t'或'\ d'。 – sweaver2112

+0

@ sweaver2112你是对的 – ed9w2in6

+0

@ ed9w2in6它不好用 –

0

从理论上讲,如果regex包含英语词典中的每个单词,那么这是可能的。

您可以创建一个检测非英文字符的正则表达式。这将检测绝对不是英语的文本,但无法确认它确实是。