excel VBA匹配,这是我写的正则表达式:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel VBA匹配,这是我写的正则表达式:相关的知识,希望对你有一定的参考价值。

这是我写的正则表达式:“。曾.*?判处.*?判处.*?(?=刑满释放。)”,现在我打算在两个“判处”前后的匹配到的任意字符都不能包含有“被告人”这个字符串,请问怎么做到

如果你目前的程序没有问题,并且加上新的要求:在两个“判处”前后的匹配到的任意字符都不能包含有“被告人”这个字符串

这样的话,建议直接增加一句,在匹配结果中查找“被告人”,如果找不到就是不包含。
使用inStr(匹配结果,“被告人”)<>0 判断是否存在“被告人”
如果直接更改正则表达也可以,但是要对每个 .*?增加一个条件,比较麻烦
参考技术A 正则表达式当然是能用的
不过你首先要打开vba,工具-引用-microsoft
vbscript
regular
expressions
vba自带了1.0的
当然通常里面还有个5.5版本的
我们当然要选5.5的了
然后就可以使用了

正则表达式:匹配字符的第一次出现

【中文标题】正则表达式:匹配字符的第一次出现【英文标题】:Regex: matching up to the first occurrence of a character 【发布时间】:2011-01-02 01:22:20 【问题描述】:

我正在寻找一种匹配所有内容的模式直到第一次出现特定字符,比如“;” - 分号

这是我写的:

/^(.*);/

但它实际上匹配所有内容(包括分号),直到最后一次出现分号。

【问题讨论】:

/^(.*?);/ 也应该可以工作(它被称为 non-greedy),但是使用[^;]* 给出的答案更好。 如何选择分号之后的所有内容,而不是分号本身。 看到这个作品\w+(?!([^]+;)|;) 但这不是为什么? .+(?!([^]+;)|;) 帕斯卡,你应该把它写成答案! 【参考方案1】:

试试/[^;]*/

谷歌regex character classes了解详情。

【讨论】:

【参考方案2】:

/^[^;]*/

[^;] 表示匹配除分号以外的任何内容。方括号是一个集合匹配运算符,它本质上是匹配这组字符中的任何字符,开头的^ 使其成为反向匹配,因此匹配该集合中的任何not

【讨论】:

请注意,此答案中的第一个 ^ 赋予正则表达式完全不同的含义:它使正则表达式仅查找从字符串开头开始的匹配项。在这种情况下,这实际上是一个无操作 if 您只运行一次正则表达式。如果您想在单个字符串中查找多个匹配项,则必须删除第一个 ^。 他确实说过他想匹配所有内容,直到第一次出现分号,所以我假设他的意思是从字符串的开头。【参考方案3】:

试试/[^;]*/

这是一个否定的character class。

【讨论】:

【参考方案4】:

你需要

/[^;]*/

[^;] 是一个字符类,它匹配除分号之外的所有字符。

引用perlre 联机帮助页:

您可以通过在 [] 中包含一个字符列表来指定一个字符类,它将匹配列表中的任何字符。如果“[”之后的第一个字符是“^”,则该类匹配任何不在列表中的字符。

这应该适用于大多数正则表达式方言。

【讨论】:

这个解决方案的重要之处在于它也匹配行尾,例如在我的情况下,我有 foo=bar;baz=bax;bab=baf 并且它匹配 bab=baf 即使没有 ; 正是我需要的。如果规范说除了目标符号之外的所有内容都匹配,但不确定它为什么会起作用......【参考方案5】:

会;

/^(.*?);/

工作?

? 是一个惰性运算符,因此正则表达式在匹配 ; 之前尽可能少地抓取。

【讨论】:

是的,但是随着对 Tim Toady 的碳酸氢盐扩展,我相信否定字符类会获胜,因为惰性量词包括回溯。无论如何 +1。 性能话题值得一读:blog.stevenlevithan.com/archives/greedy-lazy-performance【参考方案6】:

这不是正则表达式解决方案,但对于您的问题描述来说足够简单。只需拆分您的字符串并从您的数组中获取第一项。

$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];

输出

$ php test.php
match everything until first

【讨论】:

【参考方案7】:

这对我很有帮助,因为我试图弄清楚如何匹配 xml 标记中的所有字符,包括属性。我遇到了“将所有内容匹配到最后”的问题:

/<simpleChoice.*>/

但能够通过以下方式解决问题:

/<simpleChoice[^>]*>/

看完这篇文章。谢谢大家。

【讨论】:

我发现实际解析 html/xml(每种语言或框架都有自己的类)效率更高,因为它是机器格式,正则表达式适用于自然语言。 不错。我用它来修复 &lt;!DOCTYPE&gt; 标记中存在语法错误的 xml 文档。由于解析器无法处理它。【参考方案8】:

示例文本:

"this is a test sentence; to prove this regex; that is g;iven below"

例如,如果我们有上面的示例文本,则正则表达式 /(.*?\;)/ 将为您提供所有内容,直到第一次出现分号 (;),包括分号:"this is a test sentence;"

【讨论】:

不需要转义; char,因为它不是正则表达式特殊字符。也不需要分组()。你可以用/.*?;/ 是的,你说的很对。逃跑更像是“比后悔更安全” 这是我一直在寻找的答案。所以 ?让比赛在第一次出现时结束?正则表达式的这个...(我们称之为)属性的名称是什么? @Parziphal ? 字符使匹配惰性(匹配尽可能少)。想想正则表达式匹配字符直到第一个分号然后它不会走得更远,因为它放弃了(懒惰;))【参考方案9】:

"/^([^\/]*)\/$/" 为我工作,只从如下数组中获取***“文件夹”:

a/   <- this
a/b/
c/   <- this
c/d/
/d/e/
f/   <- this

【讨论】:

【参考方案10】:

没有人给你正确的答案真的有点遗憾....

在正则表达式中, ?使它不贪婪。默认情况下,正则表达式将尽可能匹配(贪婪)

只需添加一个 ?并且它将是非贪婪的并且尽可能少地匹配!

祝你好运,希望对你有所帮助。

【讨论】:

这在很大程度上取决于实际的正则表达式实现,并不是每个实现都有非贪婪模式。【参考方案11】:

这将只匹配每个字符串中的第一次出现,并将忽略后续出现。

/^([^;]*);*/

【讨论】:

【参考方案12】:

没有一个建议的答案对我有用。 (例如在记事本++中) 但是

^.*?(?=\;)

做了。

【讨论】:

对我来说,这符合角色的所有内容,但不包括。 是的,完全正确:-)(因为这是被问到的。) 这是唯一适用于我的情况的答案,非常感谢!

以上是关于excel VBA匹配,这是我写的正则表达式:的主要内容,如果未能解决你的问题,请参考以下文章

c# 正则表达式提取()中的值

一个可以使用多个正则表达式进行多次尝试匹配,并进行替换的Excel VBA自定义函数(UFD)

VBA 正则表达式匹配模式

如何用excel中的VBA的正则表达式提取出字符串?

使用正则表达式检测词组搭配

正则表达式:匹配字符的第一次出现