让我们举个例子:
" Blablabla。我的名字是约翰,我21岁。 Blablabla"
其他例子:
" Blablabla。我的名字是约翰,我21岁。 - 嗨,我玛丽和我22岁。"
基本上,我想匹配第一个人的年龄(这里,21,可能是23或其他)。我的想法是,我知道我会以&#34开头的句子;我的名字是$ name,我是21"但我无法知道什么是$ name。 总的想法是在&#34之后选择一个数字;我的名字是" +东西+"我和#34;。
如果知道我不能使用捕获组,人们如何使用正则表达式做到这一点?
到目前为止我所拥有的:
(?<=<My name is )(.*)(?= years old)
理想情况下,我想要这样的工作:
(?<=<My name is .* and I'm )(.*)(?= years old)
......但事实并非如此! 。*显然不能处于一个前瞻性的群体中(这是有道理的)。
谢天谢地。
答案 0 :(得分:1)
TextBlock
现在第一个匹配的组是名称,第二个匹配的组是年龄。
<小时/> 如果由于某种原因您不想使用群组,则可以匹配:
/My name is (\w+) and I'm (\d+) years old./
的名称和:
/(?<=My name is )\w+(?= and I'm )/
适合年龄。
<小时/> 正如您所注意到的那样,不允许使用具有可变长度的lookbehinds(至少在我所知道的正则表达式引擎中,并非逻辑上不可能)。但是,您可以使用
/(?<= and I'm )\d+(?= years old.)/
替代:
\K
答案 1 :(得分:0)
@ndn的答案基本上是正确的,但我认为需要进行一些修改:
\w+
表达式找不到空格,例如&#34;我的名字是玛丽凯特,而我今年47岁。&#34; 我相信这个正则表达式会给你你想要的东西:
My name is .+? and I'm (\d+) years old\.
(注意最后的\.
所以它将匹配文字句点,而不是任何字符。)