我有这样一段代码:
String source = "There will will be";
Regex r = new Regex(@"There \w+ be");
Console.WriteLine(r.Match(source).Value);
我在输出中看不到任何东西,如果源是有的话,我可以看到输出。有人能解释一下吗?
在某种程度上是一个问题。如何创建一个可以在1或2之间找到的正则表达式(这是一个例子,我正在编写某种解析器,需要创建我自己的那种行为的wildchar)单词。我已经尝试过几种组合,但一切都失败了。 我的一次尝试:
@"\w+\s{1,2}"
我认为这是错误的,因为{1,2}告诉regexp重复空格1或2次,而不是整个\ w + \ s。你知道如何解决它或以不同的方式制作吗?
答案 0 :(得分:1)
原因是这段代码不匹配。 \w
可以是任何字母数字字符和下划线(基本上是A
到Z
,0
到9
和_
)。然而,空格是他们自己的组(由\s
表示)。
要解决此问题,您可以通过创建一个匹配算法可以使用[]
选择任何元素的组来使正则表达式匹配:
There [\w\s]+? be
请注意,我还添加了?
以使其成为非贪婪的匹配,尝试匹配文本中尽可能少的部分(否则您可以在匹配时跳过be
)。
至于添加,只需使用不匹配的组(与匹配组相比节省一些处理时间和内存):
(?:\w+\s){1,2}
答案 1 :(得分:0)
\w
匹配任何单词字符(a-zA-Z0-9和下划线)。 There will will be
需要\w+
才能匹配will will
。 \w
无法匹配空格,因此正则表达式不匹配。
答案 2 :(得分:0)
那是因为\w+
内的空格不匹配。请尝试使用以下任一方法:
@"There \w+ \w+ be"
或
@"There [\w\s]+ be"
答案 3 :(得分:0)
\w
匹配所有字母数字字符和下划线。在您的示例中,它必须匹配包含空格的will will
,因此不匹配。但是,您的表达式只会与There will be
匹配will
。
答案 4 :(得分:0)
\ w匹配单词字符,因此两个'will'字符串之间的空格会阻止匹配。您可能希望将其替换为@"There \w+(?:\s+\w+)* be"
。