一只快手将是非常感谢的。我正在尝试创建一个小算法,将文本框中的文本输入regex表达式。详情如下:
string bar = String.Format(@"^{0}*(q*x|x*q)*", foo.Text);
regex类将传递上述bar变量,并在触发事件时初始化。但是,它只在有重复文本时返回命中。例如,文本框中的bb返回以b开头的所有结果,而1b返回每个单词的匹配。
???我的判决和逻辑有什么问题吗?(或两者兼而有之)
编辑我试图匹配从文本文件加载的字符串列表。所有包含q和x的单词至少一次,从文本框中的字母开始。例如:苯并呋喃喹喔啉苯并喹喔啉等斧头
发布于 2012-02-09 23:46:10
我想你想
string bar = String.Format(@"^{0}.*?(q.*?x|x.*?q).*", foo.Text);
.
匹配任何字符。.*?
中的问号只是使匹配变得非贪婪(即'q‘将匹配它发现的第一个Q),尽管在您的情况下它们并不是必要的。
您以前的“q*”匹配"0或更多的q字符“。
您可以进一步改进正则表达式:
string bar = String.Format(@"^{0}[a-z]*?(q[a-z]*?x|x[a-z]*?q)[a-z]*", foo.Text);
只匹配小写字母。(您可以将大小写不敏感的标志输入到regex,使其与任何情况匹配)。
发布于 2012-02-09 23:44:34
我很确定你的判断是不正确的。我想你漏掉了一些例假。在那之前*
如果您分解了您拥有的内容:^{0}*(q*x|x*q)*
,意思是:
^{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*
分解为:
^b <-- starts with 1 letter 'b'
b* <-- followed by 0 or more letter 'b's
我觉得你想要的是
^{0}.*(q.*x|x.*q)+
具体如下:
^{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
发布于 2012-02-10 00:04:40
在正则表达式中缺少一些匹配项,以匹配a、q和x之间的字符。对于单词匹配,您需要这个(\w而不是。只限于字字)
^{0}\w*(q\w*x|x\w*q)
这里可能不需要,但最好使用Regex.Escape --您的转义用户在将其直接插入regex语句之前输入了文本。
https://stackoverflow.com/questions/9220368
复制相似问题