Könnten Sie eine Regex bereitstellen, die mit Twitter-Benutzernamen übereinstimmt?
Extrabonus, wenn ein Python-Beispiel bereitgestellt wird.
Juanjo Conti
Könnten Sie eine Regex bereitstellen, die mit Twitter-Benutzernamen übereinstimmt?
Extrabonus, wenn ein Python-Beispiel bereitgestellt wird.
Engel.König.47
(?<=^|(?<=[^a-zA-Z0-9-_.]))@([A-Za-z]+[A-Za-z0-9-_]+)
Ich habe dies verwendet, da es E-Mails ignoriert.
Hier ist ein Beispiel-Tweet:
@Hallo, wie geht es @dir @mein_Freund, sende eine E-Mail an @000 an mich @ [email protected] @shahmirj
Streichhölzer:
Es funktioniert auch für Hashtags, ich verwende den gleichen Ausdruck mit dem @
gewechselt zu #
.
Sehr gut! Nur eine Korrektur: hastags und screenNames können beide Unterstriche haben. Ich würde es so hinzufügen, dass die resultierende Regex so lautet: (?<=^|(?<=[^a-zA-Z0-9-.]))#([A-Za-z]+[A-Za-z0-9-]+)
– Backslash17
22. Juni 12 um 2:31 Uhr
Außerdem kann der Unterstrich am Anfang des Benutzernamens stehen: (?<=^|(?<=[^a-zA-Z0-9-.]))#([A-Za-z_]+[A-Za-z0-9_]+)
– NZal
9. Juli 13 um 8:04 Uhr
Anwenden der Antwort auf 'RT @daddy_san: RIGHT IN THE FEELS BRUH
gibt nur @daddy
als Antwort.
– fixer
5. Juni 15 um 10:34 Uhr
Versuchen (?<=^|(?<=[^a-zA-Z0-9-_.]))@([A-Za-z]+[A-Za-z0-9_]+)
– Engel.König.47
5. Juni 15 um 13:01 Uhr
@000 sollte ebenso abgefangen werden wie Bildschirmnamen mit Unterstrich (wie von @backslash17 und @fixxxer erwähnt). Und es werden keine Hashtags einfach durch einfaches Raplacing von @ mit # abgefangen, da Hashtags auch Unicode enthalten können. So sollte der Ausdruck für Erwähnungen lauten (?<=^|(?<=[^a-zA-Z0-9-.]))@([A-Za-z0-9_]+)
– rokh
16. August 15 um 8:11 Uhr
Wenn Sie über die sprechen @username
Sache, die sie auf Twitter verwenden, dann können Sie dies verwenden:
import re
twitter_username_re = re.compile(r'@([A-Za-z0-9_]+)')
Um jede Instanz zu einem HTML-Link zu machen, könnten Sie etwa so vorgehen:
my_html_str = twitter_username_re.sub(lambda m: '<a href="http://twitter.com/%s">%s</a>' % (m.group(1), m.group(0)), my_tweet)
Gibt es eine offizielle Vorgabe?
– Juanjo Conti
21. Februar 10 um 3:28 Uhr
Nein, aber ich weiß, dass Twitter-Benutzernamen alphanumerische Zeichen und Unterstriche enthalten können, und wenn sie etwas anderes zulassen, wird dies in freier Wildbahn nicht häufig gesehen.
– icktoofay
21. Februar 10 um 3:29 Uhr
Ich liebe dich, aber das ist nicht richtig. Nun, das ist es, aber es werden auch E-Mail-Adressen erfasst, und Twitter tut das nicht.
– Engel.König.47
15. Dezember 11 um 11:01 Uhr
Fängt E-Mail-Adressen an. Verwenden Sie Regex (?<=^|(?<=[^a-zA-Z0-9-\.]))@([A-Za-z]+[A-Za-z0-9]+) von Angel.King.47 unten.
– Superkobra
7. April 13 um 12:57 Uhr
rayfranco
Die Regex, die ich verwende und die in mehreren Kontexten getestet wurden:
/(^|[^@w])@(w{1,15})b/
Dies ist der sauberste Weg, den ich gefunden habe, um den Twitter-Benutzernamen in Zeichenfolgen zu testen und zu ersetzen.
#!/usr/bin/python
import re
text = "@RayFranco is answering to @jjconti, this is a real '@username83' but this is [email protected], and this is a @probablyfaketwitterusername";
ftext = re.sub( r'(^|[^@w])@(w{1,15})b', '\1<a href="http://twitter.com/\2">\2</a>', text )
print ftext;
Dies wird mich wie erwartet zurückgeben:
<a href="http://twitter.com/RayFranco">RayFranco</a> is answering to <a href="http://twitter.com/jjconti">jjconti</a>, this is a real '<a href="http://twitter.com/username83">username83</a>' but this is [email protected], and this is a @probablyfaketwitterusername
Beyogen auf Twitter-Spezifikationen :
Ihr Benutzername darf nicht länger als 15 Zeichen sein. Ihr richtiger Name kann länger sein (20 Zeichen), aber Benutzernamen werden der Einfachheit halber kürzer gehalten. Ein Benutzername darf nur alphanumerische Zeichen (Buchstaben AZ, Zahlen 0-9) mit Ausnahme von Unterstrichen enthalten, wie oben erwähnt. Stellen Sie sicher, dass Ihr gewünschter Benutzername keine Symbole, Bindestriche oder Leerzeichen enthält.
Das sauberste. Schönes Posting von spec.
– scharfmn
25. Februar 15 um 10:13 Uhr
danke, das ist großartig! …außer es stimmt fälschlicherweise mit Benutzernamen in Medium-URLs überein, z medium.com/@p5d12000/xyz. Hier ist eine modifizierte Version, die das behebt: (^|[^w@/!?=&])@(w{1,15})b
. (Twitter selbst ist immer noch besser – es verlinkt nur die @-Erwähnung automatisch automatisch /@abc
, und die vollständige URL in https://medium.com/@abc
– aber na ja.)
– Ryan
22. November 17 um 16:33 Uhr
Evan
Twitter vor kurzem veröffentlicht zu Open Source in verschiedenen Sprachen, darunter Java, Ruby (Juwel) und Javascript-Implementierungen des Codes, den sie zum Auffinden von Benutzernamen, Hashtags, Listen und URLs verwenden.
Es ist sehr an regulären Ausdrücken orientiert.
Die einzigen Zeichen, die im Formular akzeptiert werden, sind AZ, 0-9 und Unterstrich. Bei Benutzernamen wird nicht zwischen Groß- und Kleinschreibung unterschieden, obwohl, so dass Sie verwenden könnten r'@(?i)[a-z0-9_]+'
um alles richtig abzugleichen und auch zwischen Benutzern zu unterscheiden.
Es macht keinen großen Unterschied, dass sie nicht zwischen Groß- und Kleinschreibung unterscheiden. (?i)
bezieht sich auf Ihr Muster, nicht auf den Wert, den Sie erfassen. Es ist immer noch Sache des Programms, ABC und Abc als denselben Wert zu behandeln.
– Köbi
21. Februar 10 um 5:32 Uhr
Chris Clouten
Dies ist eine Methode, die ich in einem Projekt verwendet habe, das das Textattribut eines Tweet-Objekts nimmt und den Text mit den Hashtags und user_mentions zurückgibt, die mit den entsprechenden Seiten auf Twitter verknüpft sind, wobei die neuesten Twitter-Anzeigerichtlinien eingehalten werden
def link_tweet(tweet):
"""
This method takes the text attribute from a tweet object and returns it with
user_mentions and hashtags linked
"""
tweet = re.sub(r'(A|s)@(w+)', r'1@<a href="http://www.twitter.com/2">2</a>', str(tweet))
return re.sub(r'(A|s)#(w+)', r'1#<a href="http://search.twitter.com/search?q=%232">2</a>', str(tweet))
Sobald Sie diese Methode aufgerufen haben, können Sie den Parameter my_tweet übergeben[x].Text. Hoffe, das ist hilfreich.
Es macht keinen großen Unterschied, dass sie nicht zwischen Groß- und Kleinschreibung unterscheiden. (?i)
bezieht sich auf Ihr Muster, nicht auf den Wert, den Sie erfassen. Es ist immer noch Sache des Programms, ABC und Abc als denselben Wert zu behandeln.
– Köbi
21. Februar 10 um 5:32 Uhr
Kasraf
Kürzer, /@([w]+)/
funktioniert gut.
du fehlst ‘‘ und Zeichen mit Akzenten auf diesem. füge das Äquivalent von p{L} in Python hinzu und ‘‘
– Gubatron
17. Mai ’12 um 18:07 Uhr
Sind sie normalerweise in Benutzernamen auf Twitter enthalten? Ich glaube nicht, dass er auf sie aufpassen muss. Natürlich würde es die Flexibilität erhöhen, denke ich
– Kasraf
28. Mai 2012 um 20:48 Uhr
.
Welche Einschränkungen gelten für einen Twitter-Benutzernamen?
– David Kanarek
21. Februar 10 um 3:22 Uhr
Siehe Antwort von @rayfranco für Spezifikation.
– scharfmn
25. Februar 15 um 10:15 Uhr