正则表达式匹配一个条件,除非它是一个标签

Regex to match a condition UNLESS it is a hashtag

如果有人问过这个问题,我深表歉意,但我一直在寻找答案,但未能找到适合我的用例的答案。

我正在尝试编写一个正则表达式语句来删除数字或其中包含数字的单词,前提是它们不是主题标签。我能够成功匹配其中包含数字的单词,但似乎无法编写忽略以井号标签开头的单词的条件。

这是我一直用来寻找解决方案的测试字符串:

happening bit mediacon #2022ppopcon wearing stell naman today #sb19official 123 because h3llo also12 or 23old

我需要一个正则表达式命令来捕获 123、h3llo、also12 和 23old,但忽略 #2022ppopcon 和 #sb19official 字符串。

我尝试了以下正则表达式语句。

(#\w+\d+\w*)|(\w+\d+\w*) 这成功地捕获了第 1 组中的主题标签和第 2 组中的非主题标签,但我无法弄清楚如何使其仅 select 第 2 组。

(?<!#)\w*\d+\w* 这排除了主题标签后的第一个字符,但仍捕获主题标签字符串中的所有剩余字符。例如在字符串 #2022ppopcan 中,它忽略 #2 并捕获 022ppopcan.

我已经尝试过其他我不记得了的字符串。我觉得我很接近但缺少一些重要的东西。任何帮助将不胜感激。

你可能会用到

(?<!\S)[^\W\d]*\d\w*
  • (?<!\S) 断言左侧空白边界
  • [^\W\d]* 匹配除数字以外的可选单词字符
  • \d 至少匹配一个数字
  • \w* 匹配可选的单词字符

看到一个regex demo

如果你想允许部分匹配,你可以使用负向回顾来不断言 # 后跟单词边界:

(?<!#)\b[^\W\d]*\d\w*

再看一个regex demo