Лучшее HashTag Regex
Я пытаюсь найти все хэш-теги в строке. Хештаги из потока, как твиттер, они могут быть где угодно в тексте, например:
это событие #awesome, позволяет использовать tag #fun
Я использую .NET framework (С#), я думал, что это будет подходящий шаблон регулярного выражения:
#\ш +
Является ли это лучшим регулярным выражением для этой цели?
Ответы
Ответ 1
Это зависит от того, хотите ли вы сопоставлять хэштеги внутри других строк ( "Some # Word" ) или вещи, которые, вероятно, не являются хэштегами ( "Мы №1" ). Регулярное выражение, которое вы дали #\w+
, будет совпадать в обоих случаях. Если вы слегка измените свое регулярное выражение на \B#\w\w+
, вы можете устранить эти случаи и только соответствовать хэштегам длиной больше 1 на границах слов.
Ответ 2
Если вы тянете статусы, содержащие хэштеги из Twitter, вам больше не нужно их находить. Теперь вы можете указать параметр include_entities, чтобы Twitter автоматически вызывал упоминания, ссылки и хэштеги.
Например, сделайте следующий вызов statuses/show:
http://api.twitter.com/1/statuses/show/60183527282577408.json?include_entities=true
В результирующем JSON обратите внимание на объект entity.
"entities":{"urls":[{"expanded_url":null,"indices":[68,88],"url":"http:\/\/bit.ly\/gWZmaJ"}],"user_mentions":[],"hashtags":[{"text":"wordpress","indices":[89,99]}]}
Вы можете использовать приведенное выше, чтобы найти конкретные объекты в твите (которые происходят между строковыми позициями, обозначенными свойством индексы) и соответствующим образом преобразовать их.
Если вам просто нужно регулярное выражение для поиска хэштегов, Twitter предоставляет их в библиотеке с открытым исходным кодом.
Шаблон соответствия Hashtag
(^|[^&\p{L}\p{M}\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7])(#|\uFF03)(?!\uFE0F|\u20E3)([\p{L}\p{M}\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7]*[\p{L}\p{M}][\p{L}\p{M}\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7]*)
Вышеупомянутый шаблон может быть скомпонован из этого java файла (извлечен 2015-11-23). Тесты проверки для этого шаблона расположены в этом файле вокруг строки 128.
Ответ 3
Посмотрев на предыдущие ответы здесь и сделав некоторые тестовые твиты, чтобы увидеть, что нравится Twitter, я думаю, что у меня появилось твердое регулярное выражение, которое должно сделать трюк. Это требует функциональности поиска в движке регулярных выражений, поэтому он может не работать со всеми двигателями. Он должен работать отлично для .NET и PCRE.
(?:(?<=\s)|^)#(\w*[A-Za-z_]+\w*)
В соответствии с RegexBuddy это делает следующее:
![RegexBuddy Create View]()
И снова, согласно RegexBuddy, вот что он соответствует:
![RegexBuddy Test View]()
Все, что выделено, является частью матча. Более темная подсвеченная часть указывает, что возвращается из захвата.
Редактировать декабрь 2014:
Здесь немного упрощенная версия от нуля323, которая должна быть функционально эквивалентной:
(?<=\s|^)#(\w*[A-Za-z_]+\w*)
Ответ 4
Я написал твиттер со случайно размещенными тэгами хэша, увидел, что с ним сделал Twitter, а затем попытался сопоставить его с регулярным выражением. Вот что я получил:
\ В #\ш * [A-Za-Z] +\ш *
#face #Fa! ce что-то #iam # 1 # 1 # 919 #jifdosaj somethin # idfsjoa 9 # 9 # 98 9 # 9f9j # 9jlasdjl # jklfdsajl34 # 34239 #jkf #a * # 1j3rj3
Ответ 5
Насколько я могу судить, эта модель работает лучше всего. Остальные, размещенные здесь, не учитывают, что хэштегов, начинающийся с цифр, недействителен. Убедитесь, что вы используете только вторую группу захвата при извлечении хэштегов.
(^|\s)#([A-Za-z_][A-Za-z0-9_]*)
Примечание. Я также явно ограничил взгляды и lookbehind из-за их штрафов за производительность.
![enter image description here]()
Ответ 6
это то, что я использую:
/#(\w*[0-9a-zA-Z]+\w*[0-9a-zA-Z])/g
ссылка для проверки хэштега Regex
![CavalcanteLeo]()
Ответ 7
это тот, который я написал, он ищет границы слов и только соответствует хэш-текстуу (?<=#)\w*?(?=\W)
.
Ответ 8
Я тестировал некоторые твиты и понял, что хэштеги:
- Составляются буквенно-цифровыми символами плюс подчеркивание.
- Должно быть не менее 1 буквы или подчеркивания.
- Может иметь символ точки, но хэштег будет интерпретироваться как ссылка на внешний сайт. (Я не считаю это)
Итак, что у меня есть:
\B#(\w*[A-Za-z_]+\w*)