正则表达式匹配可选的字符集不起作用

时间:2015-10-29 12:04:22

标签: c# regex

我正在尝试从这些行中捕获用户名:

title="user1 is online now"><b><font color="#2568BA"><b>user1</b></font></b></a>
title="user2 is online now"><b>user2</b></a>

以此为模式:

title=".{1,16} is \w{5,8}? now"><b>(?:<font color="#\w{6}">)<b>(?<text>.+?)</b>(?:</font>)</b></a>?

但它只捕获user1。 需要忽略“字体颜色”标签,有时它有时不会被忽略。

我现在几个小时都在挣扎,我错过了什么?

3 个答案:

答案 0 :(得分:1)

以下可能有用。

  • 假设用户名在title="后面,后跟is on(or off)line
  • 将该实例捕获到捕获组1
  • 使用后退引用来查找行
  • 中的最后一个用户名实例
  • 将其捕获到命名捕获组UserName
title="(\S+)(?= is (?:on|off)line).*(?<UserName>\k<1>)

如果您愿意,还可以捕获在线或离线状态。

答案 1 :(得分:0)

对于这些例子,这应该有效:

title="\S+\sis\s(?:on|off)line\snow">(?:<b><font[^>]+>)?<b>(.*?)</b>

答案 2 :(得分:-1)

您可以使用以下正则表达式:

<[^>]*>(user\d+)<[^>]*>