我有以下字符串:
Account has been reset and assigned the following temporary password:
NvSYVZeg
Please log into your account using your email address and the temporary password.
我想要做的是获取临时密码( NvSYVZeg 部分)并将其放入自己的字符串变量中。我已经看了好几个小时,尝试了我在网上找到的多个表达式(在RegexStorm.com和RegExr.com上测试过),他们似乎找不到临时密码。我试过了:
(?<=password:\s)(.*?)(?=\sPlease)
和
(password:)(.*?)(Please)
但他们都不适合我。有任何想法吗?
答案 0 :(得分:2)
密码和前导/尾随分隔符之间有1个以上的空格。因此,您需要使用\s*
(任何0 或更多空白符号):
password:\s*(.*?)\s*Please
^^^ ^^^
或
(?<=password:\s*).*?(?=\s*Please)
^^^ ^^^
请参阅regex demo。
第一个可能像
一样使用var m = Regex.Match(s, @"password:\s*(.*?)\s*Please");
if (m.Success)
{
Console.WriteLine(m.Groups[1].Value);
}
如果您使用第二个,只需访问m.Value
。
答案 1 :(得分:0)
通过使用RightToLeft
的正则表达式选项,我们告诉解析器向后工作而不是向前工作,这在我看来更容易制作模式。 请注意,虽然解析器反向运行,但我们的模式仍然像往常一样表示为正向。
如果我们在心理上,在我们的模式中,从锚^Password
向后工作,我们只需要通过指定\s+
来吃掉所有空格。然后,一旦所有空间被消耗,我们所要做的就是提取所有空格直到换行。模式将是
(?<Password>[^\r\n]+)\s+^Please
然后使用命名组myMatch.Groups["Password"].value
在C#中提取实际密码。
请注意模式中的^
,我们也需要选项Multiline
。