亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在這些情況下使用 RegEx?

如何在這些情況下使用 RegEx?

白衣非少年 2024-01-15 21:06:31
$給定一個字符串,我需要識別 a 后面可能被或可能不被 包圍的字段{ }:$verb = verb${verb}age = verb$$作為一種逃避,我需要考慮到這一點以及它可能在定界之前$。到目前為止我所擁有的是:reg = r'\$([_a-zA-Z0-9]*)'s = '$who likes $what're.findall(reg, s)['who', 'what']但我無法設計可選支撐的表達式,我嘗試過:reg = r'\$({?[_a-zA-Z0-9]*}?)'但這會獲取諸如以下的值:${who$who}能夠解釋可選支撐的適當表達式是什么?更新:當涉及到 previous 時$,以下內容將是無效字符串:$$verb = invalid$${verb} = invalid但這些都是有效的:$$$verb = $verb$$${verb} = $verb這是因為 a之后$$被替換為 single $。
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

如果開頭{與結尾相匹配,}您可以使用 2 個交替的捕獲組,然后該值將位于組 1 或組 2 中。

如果 前面$不應有另一個,$您可以使用負向后查找(?<!\$)\$,斷言左側不直接有美元符號。

\$(?:{([_a-zA-Z0-9]+)}|([_a-zA-Z0-9]+))\b

正則表達式演示

或者僅獲取值,您可以使用環視的替代

(?<=\$)[_a-zA-Z0-9]+\b|(?<=\${)[_a-zA-Z0-9]+(?=})

正則表達式演示

import re


regex = r"(?<=\$)[_a-zA-Z0-9]+\b|(?<=\${)[_a-zA-Z0-9]+(?=})"

test_str = ("$verb = verb\n"

            "${verb}age = verb")


print(re.findall(regex, test_str))

輸出


['verb', 'verb']

編輯


對于更新的問題,例如使用捕獲組,您可以匹配一個或 3 個或更多美元符號,斷言前面的不是美元符號。


(?<!\$)(?:\$(?:\${2,})?)(?:{([_a-zA-Z0-9]+)}|([_a-zA-Z0-9]+))


查看完整回答
反對 回復 2024-01-15
?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

您可以通過以下方式獲得第二組匹配:

reg2 = '\$(?:{)([_a-zA-Z0-9]+)(?:})'

這使得支撐是強制性的,但沒有被捕獲......


查看完整回答
反對 回復 2024-01-15
  • 2 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號