在问这个问题之前,我已经在谷歌上搜索过这个问题,并且我查看了所有与StackOverflow相关的问题。
这个问题很简单
我有一串“北大西洋公约组织”
我有一个图案"a.*z",现在它会匹配。
北ATLATIC条约ORGANIZation
但我需要它只匹配完整的单词(例如orgANIZation)
我试过用"\ba_z\b“和"\Ba_z\B”作为模式,但我想我还不太明白
如何更改模式以匹配字符串包含的完整单词(不匹配多个单词)
模式是动态生成的,用户输入*z,我的应用程序将其转换为匹配字符串中部分完整单词的模式。
我的问题是我不知道用户要搜索什么。理想情况下,我会为用户的表达式准备一些regexp。
谢谢!
发布于 2009-05-04 16:34:44
orgANIZation中的ANIZ是,而不是,是一个完整的单词--它是一个单词的一部分。您的模式不是您所写的-- a*z将与您所描述的不匹配;您可能使用的是a.*z,这会。所以,试试a[^ ]*z,这样它就不匹配空间了。当然,如果除了空格之外还有其他字符不想匹配,比如某些类型的标点符号,那么当然也要把它们放在[^...]结构中。
发布于 2009-05-04 16:42:29
这就是你想要的:
new Regex( @"\b[^ ]*a[^ ]*z[^ ]*\b" );它只匹配一个单词(不允许空格)--而是整个单词。您可以将您的用户输入转换为这样一个正则表达式--只需将*替换为^*-它甚至可以用于多个通配符。
发布于 2009-05-04 17:00:19
与您的问题没有直接关系,但是您可能想要查看一个RegEx可视化工具,该工具将根据文本输入和给定的正则表达式显示结果。
这样一个工具非常有助于找到正确的模式,这可能是相当棘手的。.net RegEx专用的一个很好的工具是RegExLab,它有点老了,但在显示正则表达式与之匹配方面做得很好。因为页面是德语的,所以只需单击regexlab.006.zip链接即可。源代码也包括在内。
https://stackoverflow.com/questions/820810
复制相似问题