簡體   English   中英

使用 re.sub 后從 backrefrence 中刪除字符

[英]Remove character from backrefrence after using re.sub

我有一個包含用戶名列表的字符串,例如:

s = '@romeo went to @juliet and said hi, I'm @romeo'

我想用指向用戶配置文件的鏈接替換該用戶名模式,該鏈接應該成為<a href="/u/username">@username</a>我現在可以替換模式,但是,我似乎無法擺脫href@使用反向引用。

print(re.sub(r"(^|[^@\\w])@(\\w{1,31})", r'<a href="/u/\\g<0>">\\g<0></a>', s))

現在打印:

<a href="/u/@romeo">@romeo</a> went to<a href="/u/ @juliet"> @juliet</a> and said hi, Im<a href="/u/ @romeo"> @romeo</a>

現在你可以看到額外的空間, @我在使用正則表達式后似乎無法擺脫它

你需要使用

print(re.sub(r"\B(?<!@)@(\w{1,31})", r'<a href="/u/\1">\g<0></a>', s))

請參閱Python 演示正則表達式演示

正則表達式

  • \\B@ - @ char 位於字符串的開頭,或者緊接在非單詞字符之前
  • (?<!@) - 前面的@不應該緊跟在@之前
  • (\\w{1,31}) - 捕獲組 1 ( \\1 ):一到三十一個字字符。

r'<a href="/u/\\1">\\g<0></a>'\\1代表 Group 1 值。 \\g<0>代表整場比賽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM