假設我有一個字串:
L1045 $ u0 $ m0 $ BIANCA $ They do not!
我需要將名稱 - BIANCA 和末尾的文本提取到兩個變數中。我試著這樣做:
dialogue = "L1045 $ u0 $ m0 $ BIANCA $ They do not!"
name : str = ""
line : str = ""
name = re.findall('^L.*\s(. ?)\s.*', dialogue)
但我對使用正則運算式有點困惑。如何使用正則運算式解決這個問題?
謝謝!
uj5u.com熱心網友回復:
你可以不用 re
data = "L1045 $ u0 $ m0 $ BIANCA $ They do not!"
parts = data.split(' $ ')
print(parts[-2].strip())
print(parts[-1].strip())
輸出
BIANCA
They do not!
uj5u.com熱心網友回復:
您可以使用此正則運算式:
[ \t]([^ ] )[ \t]\ {3}\$\ {3}[ \t] ([^ ] )$
演示
Python:
import re
dialogue = "L1045 $ u0 $ m0 $ BIANCA $ They do not!"
>>> re.findall(r'[ \t]([^ ] )[ \t]\ {3}\$\ {3}[ \t] ([^ ] )$', dialogue)
[('BIANCA', 'They do not!')]
您還可以拆分和切片:
>>> re.split(r'[ \t]\ {3}\$\ {3}[ \t]', dialogue)[-2:]
['BIANCA', ' They do not!']
但是如果 $ 沒有找到,split 和 slice 不會優雅地失敗;上面的搜索模式確實如此。
uj5u.com熱心網友回復:
您可以L在字串的開頭進行匹配,并使用量詞{n}設定要匹配的出現次數, $ 后跟非空白字符。
^L\S*(?: \ {3}\$\ {3} \S ){2} \ {3}\$\ {3} (\S ) \ {3}\$\ {3} (. )$
模式匹配:
^字串的開始L\S*匹配L后跟可選的非空白字符(?: \ {3}\$\ {3} \S ){2}使用量詞,重復 2 次匹配定界符,后跟 1 個非空白字符\ {3}\$\ {3}匹配分隔符(\S )捕獲組 1,匹配 1 個非空白字符進行匹配BIANCA\ {3}\$\ {3}匹配分隔符(. )捕獲組 2,匹配除換行符以外的任何字符 1 次以匹配They do not!$字串結束
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317347.html
上一篇:用于引發不同例外的函式的單元測驗
