如何使用正则表达式从消息中过滤出这些数据?

4

我有这样格式化的信息:

Character Name > <url=fitting:11978:14240;1:31366;1:1447;2:31952;1:14136;1:31378;1:2104;2:3608;4:12058;1:31932;1:2488;6:29001;5::>He Dead :(</url> asdf asefase 351235125

我想要过滤掉这个:

:11978:14240;1:31366;1:1447;2:31952;1:14136;1:31378;1:2104;2:3608;4:12058;1:31932;1:2488;6:29001;5::

如果我仅限于数字、分号和冒号,它也会捕捉到消息中的数字和消息时间戳(另一个属性有时也在那里),因此这似乎不能正常工作。
我还想能够在输入中只有数据时获取数据:
:11978:14240;1:31366;1:1447;2:31952;1:14136;1:31378;1:2104;2:3608;4:12058;1:31932;1:2488;6:29001;5::

有时候第一个:也不存在。
有什么好的方法可以过滤掉它呢?我对正则表达式有些困惑。
编辑:另一个例子。
[04:04:55] Morpheus Deathbrew > is this okay? it's cap stable  <url=fitting:11978:14240;1:2032;1:31366;1:1447;2:2281;1:31952;1:14136;1:31378;1:2104;1:3608;4:12058;1:2488;6:29001;6::>He Dead :(</url>

我认为大多数解决方案在某些情况下也会匹配时间戳。如果聊天消息中有 ::,我还希望能够可能地处理它。也许匹配如果它有 :: 和数字?并且至少一个;在:和::之间?


“::” 总是在模式的末尾吗?还是可能不存在或者是完全不同的东西? - hwnd
我相当确定双冒号::总是存在的。 - Christian Stewart
1个回答

2

你觉得这样怎么样?


(注:保留HTML标签)
/[\d:;]+::/
  • [\d:;]+ 匹配任何数字、冒号或分号。量词符号+ 是贪婪的,它会消耗主体中出现的每个::,直到最后一个::

  • :: 匹配最后一个::

正则表达式演示


编辑

强制格式

/:?(\d+:\d+;)+\d+::/

Regex Demo


问题在于,如果“::”不存在,则该模式将匹配字符串中的任何位置。 - hwnd
我认为它需要更具体一些:/ - Christian Stewart
好的,你正在匹配任何数字。这看起来很不错。如果你看一下序列,会发现有一个模式,每个组之间都用 ; 分隔,例如 3:2049。是否有一种方法也可以强制执行这种格式呢?很抱歉让这变得更加复杂,但我正在努力找出如何使其超级可靠,而不是匹配人们的聊天文本。 - Christian Stewart
@nu11p01n73R非常感谢您的时间 :) 如果您有任何改进措施,使其更可靠,我非常感激。 - Christian Stewart
@ChristianStewart 我已经添加了一个编辑。它将强制执行该模式。请参见示例的演示链接。希望能对您有所帮助 :) - nu11p01n73R
@nu11p01n73R 很好!谢谢! - Christian Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接