在获取正则表达式语句以接受两个表达式时遇到问题。
此处的“re.pattern”代码有效:
If UserChoice = "" Then WScript.Quit 'Detect Cancel
re.Pattern = "[^(a-z)^(0,4,5,6,7,8,9)]"
re.Global = True
re.IgnoreCase = True
if re.test( UserChoice ) then
Exit Do
End if
MsgBox "Please choose either 1, 2 or 3 ", 48, "Invalid Entry"
虽然下面的“regex.pattern”代码没有。我想用它来格式化收集组的DSQUERY命令的结果,但是我不希望在“,”后面有任何信息,也不想要在下面的dsquery中正常收集的前导CN =运行: “dsquery.exe用户forestroot -samid”& strInput&“| dsget user -memberof”)
我希望格式化的字符串在格式化之前看起来像这样:
CN = APP_GROUP_123,OU =全球组,OU =帐户,DC = corp,DC = contoso,DC = biz
这是我想要的结果:
APP_GROUP_123
Set regEx = New RegExp
**regEx.Pattern = "[,.*]["CN=]"**
Result = regEx.Replace(StrLine, "")
单独使用时,我只能使正则表达式工作
regEx.Pattern = ",."
或
regEx.Pattern = "CN="
代码嵌套在这里:
Set InputFile = FSO.OpenTextFile("Temp.txt", 1)
Set InputFile = FSO.OpenTextFile("Temp.txt", 1)
set OutPutFile = FSO.OpenTextFile(StrInput & "-Results.txt", 8, True)
do While InputFile.AtEndOfStream = False
StrLine = InputFile.ReadLine
If inStr(strLine, TaskChoice) then
Set regEx = New RegExp
regEx.Pattern = "[A-Za-z]{2}=(.+?),.*"
Result = regEx.Replace(StrLine, "")
OutputFile.write(Replace(Result,"""","")) & vbCrLf
End if
答案 0 :(得分:0)
这应该让你开始:
str = "CN=APP_GROUP_123,OU=Global Groups,OU=Accounts,DC=corp,DC=contoso,DC=biz"
Set re = New RegExp
re.pattern = "[A-Za-z]{2}=(.+?),.*"
if re.Test(str) then
set matches = re.Execute(str)
matched_str = "Matched: " & matches(0).SubMatches(0)
Wscript.echo matched_str
else
Wscript.echo "Not a match"
end if
<强>输出:强> Matched: APP_GROUP_123
您需要的正则表达式为[A-Za-z]{2}=(.+?),.*
如果匹配成功,它会捕获括号中的所有内容。 .+?
表示它会匹配任何字符非贪婪直到第一个逗号。 ?
中的.+?
使表达式非贪婪。如果你要省略它,你会在,DC=biz
答案 1 :(得分:0)
您的正则表达式"[,.*]["CN=]"
有两个原因无效:
"[,.*]["
,然后是(无效的)变量名CN=]
(也没有运算符)和开头下一个字符串(3 rd 双引号)。您误解了regular expression语法。方括号表示字符类。表达式[,.*]
将匹配任何单个逗号,句点或星号,不逗号后跟任意数量的字符。
您打算使用的是一个替换,用管道符号(|
)表示,字符串的开头由插入符号(^
)匹配:
regEx.Pattern = ",.*|^CN="
话虽如此,在你的情况下,一个更好的方法是使用一个组并用组匹配替换整个字符串:
regEx.Pattern = "^cn=(.*?),.*"
regEx.IgnoreCase = True
Result = regEx.Replace(strLine, "$1")