我需要将一个ID字段添加到由电子邮件地址的用户ID部分制作的plif文件中。我们的电子邮件用户ID是可变长度,但当我输出它作为ID时,输出必须正好是48个字符长。
查找电子邮件用户标识的正则表达式
A(02||20)(N.* )([^ ]*)(\@[a-zA_Z.]*newpaltz.edu)
我到目前为止的电子邮件用户ID输出\ 3 =电子邮件用户ID& ZZZ只是一个占位符,所以我很容易找到我的出局。
A02\3 ZZZ A\1\2\3\4
问题是我无法将输出格式化为正好48个字符。
这是我可能获得的3个电子邮件用户ID
toleveg
some.otheruser
n03468654
我必须输出格式如下:
A02toleveg + 00ACN
A02some.otheruser + 00ACN
A02n03468654 + 00ACN
我一直在使用notepad ++,但我想我可能会切换到PHP。如果没有直接的正则表达式解决方案,VBscript或Jscript是我可以处理的其他语言。
答案 0 :(得分:0)
如果你坚持使用VBScript,你可以在正则表达式的Replace方法上使用回调函数:
Set re = new RegExp
re.global = true
re.pattern = "A(02||20)(N.* )([^ ]*)(\@[a-zA_Z\.]*newpaltz.edu)"
myString = "A02Ntoleveg anyOtherText toleveg@bla.newpaltz.edu"
msgbox re.Replace(myString, getRef("replaceHelper"))
public function replaceHelper(match, fixed20or02, Nanything, emailLeft, emailRight, position, fullstring)
Set sb = CreateObject("System.Text.StringBuilder")
sb.Append_3 "A"
sb.Append_3 fixed20or02
sb.Append_3 left(emailLeft & string(48, " "), 48)
sb.Append_3 "00ACN"
replaceHelper = sb.ToString()
end function
' outputs: "A02toleveg 00ACN"
注意:我认为这不是您需要的确切输出,但您会明白这一点,很容易适应您的意愿。
注2:我使用了一个字符串构建器来学习和操作,但当然你仍然可以使用s = s & "text to append"
。
注意3:在正则表达式的最后一组中使用\.
。 .
只会匹配所有内容
注4:电子邮件验证很难,请参阅Wikipedia。确保所有地址都匹配。 (您可以通过my*account{"@possible spam"!}@[IPv6:2001:db8:1ff::a0b:dbd0]
)
答案 1 :(得分:0)
我有自己的工作解决方案,但它是在用Macro编程语言构建的Note Tab Pro中。多年来,我发现Note Tab Pro非常宝贵。所以它的价值在于我的代码。
Set Email ID as New User ID
^!Jump TEXT_START
^!Continue The PLIF File must be open in the active Window. This will make a user id field out of New Paltz email user ID if they have one.
^!set %count%=0
^!set %bannercount%=0
^!set %longones%=0
^!set %currentline%=0
^!set %longids%=""
^!set %numberoflines%=^$GetLineCount$
^!select ALL
^!Keyboard Ctrl+U
^!Replace "ANEWMN" >> "ANEW50" IASW
^!Replace "A20N0" >> "A2080" TIAW
^!Replace "NEWMNNEWMN00000000Y" >> " NEWMN00000000Y" RIAW
;Replacements for second loader file
;^!Replace "A20N0([0-9]{7}[ ]+\+[ ]+)\d\dACN" >> "A0280$1\02ACN" RWAS
^!Jump TEXT_START
:findnext
^!find "( \d)(\d)(\d\d\d\dA16.+)( A)(02|20)(8[^ ]+)(.+ )([^ ]+)(\@[a-zA_Z.]*newpaltz.edu)" RAITS
^!IfError DONE
^!SetArray %Matches%=^$GetReSubStrings$
^!set %numofIDs%=^%Matches2%
^!set %email%=^%Matches8%
^!set %banner%=^%Matches6%
^!if ^$StrCopyRight(^%banner%;6)$=^$StrCopyRight(^%email%;6)$ usesbanner ELSE tryemail
:usesbanner
^!inc %bannercount%
^!Jump LINE_END
^!set %newIDfield%=""
^!goto findnext
:tryemail
^!set %emaillength%=^$StrSize(^%email%)$
^!if ^%emaillength% > 20 toobig ELSE doit
:toobig
^!inc %longones%
^!set %longids%=^%longids%^P^%email%
^!Jump LINE_END
^!set %newIDfield%=""
^!goto findnext
:doit
^!set %spaces%=^$Calc(20-^%emaillength%)$
^!set %newIDfield%=" A02^%email%^$StrRandom(^%spaces%; )$+ 02ACN "
^!Inc %count%
^!Inc %numofIDs%
^!StatusShow Don't touch Changing number ^%count%
^!InsertText ^%Matches1%^%numofIDs%^%Matches3%^%newIDfield%^%Matches4%^%Matches5%^%Matches6%^%Matches7%^%Matches8%^%Matches9%
^!Jump LINE_END
^!set %newIDfield%=""
^!goto findnext
:DONE
^!Jump TEXT_START
^!Info [L]Added Campus IDs to ^%count% ^POut of ^%numberoflines% records^P^%bannercount% IDs = banner number alwready^P^P^%longones% IDs were too long: ^%longids%