我有一个大文本文件,我需要在其中找到仅包含唯一字母的字词a-z
,A-Z
)。单词不应包含除字母以外的任何字符。此外,它需要不区分大小写,以便alphA
,morNing
之类的单词不匹配。
示例:
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。
我已经被困在这里很长一段时间了。请指出我正确的方向。感谢
答案 0 :(得分:4)
试试这个正则表达式:
\b(?![^a-zA-Z]+\b)(?![a-zA-Z]*([a-zA-Z])[a-zA-Z]*\1)[a-zA-Z]+\b
<强>解释强>
\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
<强>输出:强>