我想在一个字符串中找到以@开头但不以它结尾的空格之间的序列。即找到“关键字,但不是”东西“。例如
"@hello how are @you? I am @good, thank @you! But @bad@ is not okay."
应该匹配“你好”,“你”,“好”,“你”,但不坏我和GPT 4认为这应该起作用,但它没有
/@[^\s]+(?<!@)/
无论是这个还是其他的组合
/@[a-zA-Z0-9_]+(?<![@\s])/
fykwrbwg1#
你可以使用这个正则表达式来进行负的前瞻:
@[^@\s]+\b(?!@)
RegEx Demo
RegEx详情:
@
[^@\s]+
\b
(?!@)
1cosmwyk2#
考虑到您的示例字符串仅包含可以使用的单词字符,
(?<=@)\w+\b(?!@)
参见regex demo。
(?<=@)
\w+
@abc@
xmjla07d3#
我想在字符串中找到以@开头但不以它结尾的空格之间的序列显然,您还希望只匹配单词字符,在这种情况下,您可以使用\w
\w
@(?<=(?<!\S@))\w+(?!\S*@(?!\S))
@(?<=(?<!\S@))
(?!\S*@(?!\S))
Regex demo
3条答案
按热度按时间fykwrbwg1#
你可以使用这个正则表达式来进行负的前瞻:
RegEx Demo
RegEx详情:
@
:匹配@
[^@\s]+
:匹配任何不是@
且不是空白的字符的1+\b
:字边界(?!@)
:负向前查找,Assert下一个字符不是@
1cosmwyk2#
考虑到您的示例字符串仅包含可以使用的单词字符,
参见regex demo。
(?<=@)
-一个正向后查找,需要在当前位置的左边立即添加一个@
字符\w+
-一个或多个单词字符\b
-一个单词边界(如果后续的前瞻检查失败,它将停止引擎回溯到\w+
模式,如果找到像@abc@
这样的子串,我们将不会得到任何匹配)(?!@)
-一个负的前瞻,不允许@
字符直接到当前位置的右边。xmjla07d3#
我想在字符串中找到以@开头但不以它结尾的空格之间的序列
显然,您还希望只匹配单词字符,在这种情况下,您可以使用
\w
@(?<=(?<!\S@))
Match @并在它之前Assert一个whitspace边界\w+
匹配1+字字符(?!\S*@(?!\S))
Assert“word”不以@结尾Regex demo