如何使用字符和字数检测字符串中是否包含印地语(devnagri)

A_N*_*A_N 2 regex unicode powershell hindi

下面是一个示例字符串 -

$string = "abcde ????? abcde"
Run Code Online (Sandbox Code Playgroud)

我需要检查天气这个字符串包含任何印地语(梵文)内容,如果是的话,字符和单词的数量。我猜带有 unicode 字符类的正则表达式可以工作http://www.regular-expressions.info/unicode.html。但我无法找出正确的正则表达式语句。

ssc*_*ep3 11

要确定字符串是否包含印地语(梵文)字符,您需要拥有所有印地语字符的完整列表。根据这个网站,印地语字符是0x0900和之间的十六进制字符0x097F(十进制2304到2431)。

如果这些字符中的任何一个在集合中,则正则表达式模式需要匹配。因此,您可以使用模式(实际上是一组字符)来匹配字符串,如下所示:

[\u0900\u0901\u0902 ... \u097D\u097E\u097F]

因为手动写下这个字符列表相当麻烦,你可以通过迭代从 2304 到 2431 的十进制字符或十六进制字符来生成这个字符串。

要计算包含至少一个印地语字符的所有单词,您可以使用以下模式。它包含\s单词周围的空格 ( ) 或单词周围的开头 ( ^) 或结尾 ( $) 以及一个全局标志,以匹配每次出现 ( /g):

/(?:^|\s)[\u0900\u0901\u0902 ... \u097D\u097E\u097F]+?(?:\s|$)/g

这是 JavaScript 中的实时实现:

var numberOfHindiCharacters = 128;
var unicodeShift = 0x0900;
var hindiAlphabet = [];
for(var i = 0; i < numberOfHindiCharacters; i++) {
  hindiAlphabet.push("\\u0" + (unicodeShift + i).toString(16));
}

var regex = new RegExp("(?:^|\\s)["+hindiAlphabet.join("")+"]+?(?:\\s|$)", "g");
var string1 = "abcde ????? abcde";
var string2 = "abcde abcde";

[ string1.match(regex), string2.match(regex) ].forEach(function(match) {
  if(match) {
    console.log("String contains " + match.length + " words with Hindi characters only.");
  } else {
    console.log("String does NOT contain any words with Hindi characters only.");
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只使用类`[\u0900-\u097F]` (12认同)
  • ```re.search(r'\p{Devanagari}',sname)``` 也可以工作。 (2认同)

San*_*xit 6

应该是一个范围。不需要所有字符的列表。以下将检测梵文单词

[\u0900-\u097F]+
Run Code Online (Sandbox Code Playgroud)