我知道正则表达式是一个非常热门的话题,还有很多类似的问题,但是,我还没有找到满足我需求的问题。
我需要检查我的字符串的格式如下:
我还没有尝试使用冒号,分号或括号,但是到目前为止,我只停留在句号上。这些字符是可选的,因此我无法进行仔细检查,我试图抓住它们,但在类似情况下仍会找到匹配项
00000 *TEST .FINAL STATEMENT. //Matches, but it shouldn't match.
00001 *TEST2 . FINAL STATEMENT. //Matches, but it shouldn't match.
00002 *TEST3. FINAL STATEMENT. //Matches, **should** match.
这是我到目前为止拥有的正则表达式:
^\d{5}\s{6}[\s\*][^.]*([^.\s]+\.\s)?[^.]*\..*$
我真的不知道这是怎么发生的,尤其是因为我使用[^。]表示我将接受除句点以外的任何内容作为通配符,并且可选模式一目了然:一个时期,它后面不应该有空格,并且在它之后也应该有空格。
答案 0 :(得分:0)
尝试一下:
Set wsDest = Workbooks(fName) 'Worksheets("TAC Data")
https://regex101.com/r/WwpssV/1
在模式的最后一部分,具有特殊要求的字符为^\d{5}\s{6}[\s\*] # Your original pattern
(?: # Repeat 0 or more times:
[^.:;()]*| # Unconstrained characters
(?<!\s)[.:;](?=\s)| # Punctuation after non-space, followed by space
\((?!\s)| # Opening parentheses not followed by space
(?<!\s)\) # Closing parentheses not preceeded by space
)*
\.$ # Period, then end of string
,因此,请使用负字符集来匹配除那些字符之外的任何字符:.:;()
然后与:
如果在最后一个句号之前有任何句号,冒号或分号,则字符前不能带空格,而后必须带空格。
以[^.:;()]*
填充-仅当这些字符之一不带空格且后跟空格时,才匹配。
左括号不能带有空格。
由(?<!\s)[.:;](?=\s)
右括号不能带空格。
由\((?!\s)
然后在模式结尾处的这四种可能性之间进行切换。