VBscript_Words仅包含唯一且不区分大小写的字母

时间:2017-10-01 12:30:42

标签: regex vbscript

我有一个大文本文件,我需要在其中找到仅包含唯一字母的字词a-zA-Z)。单词不应包含除字母以外的任何字符。此外,它需要不区分大小写,以便alphAmorNing之类的单词不匹配。

示例:

 marco        -  Should match(because of unique letters)
 asia         -  Should Not Match(contains 2 'a')
 asiA         -  Should Not Match(as it has 'a' and 'A')
 alpha        -  Should not match
 mike         -  Should match
 roger        -  Should not match
 abascus      -  Should not match
 mach1        -  Should not match(because of presence of 1)    

我需要测试的文件中的示例文本:

  

股份共同构成股票。公司股票被划分为股份,其总数在业务形成时列出。额外股份可能随后由现有股东授权并由公司发行。在某些司法管辖区,每股股票都有一定的声明面值,这是一个名义会计价值,用于代表公司资产负债表上的权益。但是,在其他司法管辖区,股票的发行可能没有相关的票面价值。

     

股票代表企业所有权的一小部分。一个企业可能   声明不同类型(或类别)的股票,每个股票都有   独特的所有权规则,特权或分享价值。所有权   股票可以通过发行股票证明来记录。一支股票   证书是指定股份数量的法律文件   由股东拥有,以及其他具体的股份,如   票面价值(如果有)或股票类别。

     

在英国,爱尔兰共和国,南非和   澳大利亚股票也可以指完全不同的金融   政府债券等工具,或者不太常见的各种工具   有价证券。

我的尝试:

\b(?![^a-zA-Z]+)(?!(?:[a-zA-Z]*([a-zA-Z]))*\1)[a-zA-Z]+\b

但它是not able to match anything here

我已经被困在这里很长一段时间了。请指出我正确的方向。感谢

1 个答案:

答案 0 :(得分:4)

试试这个正则表达式:

\b(?![^a-zA-Z]+\b)(?![a-zA-Z]*([a-zA-Z])[a-zA-Z]*\1)[a-zA-Z]+\b

Click for Demo

<强>解释

  • \b - 字边界
  • (?![^a-zA-Z]+\b) - 否定前瞻,验证单词应仅包含1+个字母
  • (?![a-zA-Z]*([a-zA-Z])[a-zA-Z]*\1) - 另一个负向前瞻 - 这部分用于验证不重复2个字母。进一步分解如下:
    • [a-zA-Z]* - 检查是否存在0+字母
    • ([a-zA-Z]) - 捕捉群组中的一封信。将检查该组中捕获的这封信是否有任何重复。
    • [a-zA-Z]* - 再次检查是否存在0+字母,以便考虑重复字母彼此不相邻的情况。
    • \1 - 检查在group1中捕获的信件
  • [a-zA-Z]+ - 匹配1个以上的字母
  • \b - Word Boundary

VBScript代码:

Option Explicit
Dim objRE, strTest, objMatches, match, strOutput
strTest = "marco asia asiA alpha mike roger abascus mach1"
Set objRE = New RegExp
objRE.Global=True
objRE.IgnoreCase=True
objRE.Pattern="\b(?![^a-zA-Z]+\b)(?![a-zA-Z]*([a-zA-Z])[a-zA-Z]*\1)[a-zA-Z]+\b"
Set objMatches = objRE.Execute(strTest)
For Each match In objMatches
    strOutput = strOutput & match.Value & vbCrLf
Next
MsgBox strOutput
Set objMatches = Nothing
Set objRE = Nothing

<强>输出:

enter image description here