首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于创建正则表达式模式的String.Format

用于创建正则表达式模式的String.Format
EN

Stack Overflow用户
提问于 2012-02-09 23:08:44
回答 4查看 7.4K关注 0票数 2

一只快手将是非常感谢的。我正在尝试创建一个小算法,将文本框中的文本输入regex表达式。详情如下:

代码语言:javascript
运行
复制
    string bar = String.Format(@"^{0}*(q*x|x*q)*", foo.Text);

regex类将传递上述bar变量,并在触发事件时初始化。但是,它只在有重复文本时返回命中。例如,文本框中的bb返回以b开头的所有结果,而1b返回每个单词的匹配。

???我的判决和逻辑有什么问题吗?(或两者兼而有之)

编辑我试图匹配从文本文件加载的字符串列表。所有包含q和x的单词至少一次,从文本框中的字母开始。例如:苯并呋喃喹喔啉苯并喹喔啉等斧头

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-09 23:46:10

我想你想

代码语言:javascript
运行
复制
string bar = String.Format(@"^{0}.*?(q.*?x|x.*?q).*", foo.Text);

.匹配任何字符。.*?中的问号只是使匹配变得非贪婪(即'q‘将匹配它发现的第一个Q),尽管在您的情况下它们并不是必要的。

您以前的“q*”匹配"0或更多的q字符“。

您可以进一步改进正则表达式:

代码语言:javascript
运行
复制
string bar = String.Format(@"^{0}[a-z]*?(q[a-z]*?x|x[a-z]*?q)[a-z]*", foo.Text);

只匹配小写字母。(您可以将大小写不敏感的标志输入到regex,使其与任何情况匹配)。

票数 0
EN

Stack Overflow用户

发布于 2012-02-09 23:44:34

我很确定你的判断是不正确的。我想你漏掉了一些例假。在那之前*

如果您分解了您拥有的内容:^{0}*(q*x|x*q)*,意思是:

代码语言:javascript
运行
复制
^{0}* <-- starts with 0 or more of whatever the text box had.
(q*x|x*q)* <-- then contains 0 or more of this pattern.

由于您要求"0或更多“,它基本上匹配任何东西。输入"bb“似乎有效,因为这将使启动regex:^bb*分解为:

代码语言:javascript
运行
复制
^b <-- starts with 1 letter 'b'
b* <-- followed by 0 or more letter 'b's

我觉得你想要的是

代码语言:javascript
运行
复制
^{0}.*(q.*x|x.*q)+

具体如下:

代码语言:javascript
运行
复制
^{0} <-- starts with 1 of whatever my text box had
.* <-- then 0 or more of anything
(q.*x|x.*q)+ <-- then 1 or more of q + anything + x, or x + anything + q
票数 0
EN

Stack Overflow用户

发布于 2012-02-10 00:04:40

在正则表达式中缺少一些匹配项,以匹配a、q和x之间的字符。对于单词匹配,您需要这个(\w而不是。只限于字字)

代码语言:javascript
运行
复制
^{0}\w*(q\w*x|x\w*q)

这里可能不需要,但最好使用Regex.Escape --您的转义用户在将其直接插入regex语句之前输入了文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9220368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档