使用正则表达式,我需要在以特定字符开头的字符串中找到一个单词。单词必须是字母数字,但可以在单词中包含下划线 (_)。单词开头和结尾的下划线是不可接受的。
例如,我有以下字符串。
@word1 消息@@ 消息@ 消息@word2_ 消息@word#3 @_word4 消息@word_5
结果应该是:
@word1 @word_5
谢谢。
使用正则表达式,我需要在以特定字符开头的字符串中找到一个单词。单词必须是字母数字,但可以在单词中包含下划线 (_)。单词开头和结尾的下划线是不可接受的。
例如,我有以下字符串。
@word1 消息@@ 消息@ 消息@word2_ 消息@word#3 @_word4 消息@word_5
结果应该是:
@word1 @word_5
谢谢。
使用正则表达式模式
(?:^|(?<=\s))@(?!_)\w+(?<!_)(?:(?=\s)|$)
或者
(?:^|(?<=\W))@(?!_)\w+(?<!_)(?:(?=\W)|$)
取决于你需要/想要在前面/后面有什么...
例如,如果@word1
in@word_5 @word1. @word#2 @word*3
应该匹配,考虑将点.
作为分隔符或句尾。
这将起作用 - 边界(第 1 行和第 3 行)相当重\b
,因为单词边界在这里不起作用,因为您不想匹配“@word#3”和“d”之后的“#”字符" 触发单词边界。
(?<=\s|^)
@(?!_)\w+(?<!_)
(?=\s|$)
这个正则表达式会做到的!
(?<=(^|\s))@([a-zA-Z0-9]{1}\w*[a-zA-Z0-9]|[a-zA-Z0-9]{1})(?=(\s|$))
它也匹配单个字母