我正在嘗試撰寫一個正則運算式代碼,使其符合以下條件:
- CS 1110:“編程簡介”
- ENGR 1624:“工程導論”
- BME 2220:“生物力學”
應該都匹配。
- CS 20:“CS簡介”
- ENGR 1624:“ ”
- ENGR 1624:“”
不應該匹配。
到目前為止,這是我的代碼:
([A-Z]{2,4})\s([1000-4000]{4})(:)\s(["][a-zA-Z]*\s[a-zA-Z]*?\s[a-zA-Z]*["])
但是我遇到了兩個問題:
- 當我嘗試運行 ENGR 1624 時,它不起作用(我假設是因為我的代碼的 [1000-4000]{4} 部分是錯誤的)
- 它不適用于“生物力學”這個詞
任何人都可以幫助修復我的代碼嗎???
uj5u.com熱心網友回復:
如果您不想在最后一個括號之間匹配空字串,您可以重復字符類 1 次或多次,[a-zA-Z] 并可選擇重復以空格開頭的組,然后再重復字符類。
關于模式中的記法,"不必在方括號之間,字符類記法[1000-4000]{4}不是一個范圍,它重復4次0 1 -和4
1000-4000 的范圍可以寫成(?:4000|[1-3][0-9]{3})匹配 4000 或 1000-3999 的范圍
您可以使用 3 個捕獲組來更新模式:
\b([A-Z]{2,4})\s(4000|[1-3][0-9]{3}):\s("[a-zA-Z] (?:\s[a-zA-Z] )*")
正則運算式演示| Python 演示
例如
import re
pattern = r'\b([A-Z]{2,4})\s(4000|[1-3][0-9]{3}):\s("[a-zA-Z] (?:\s[a-zA-Z] )*")'
s = ("CS 1110: \"Introduction to Programming\", ENGR 1624: \"Introduction to\n"
"Engineering\", and BME 2220: \"Biomechanics\"\n\n"
"CS 20: \"Introduction to CS\", ENGR 1624: \" \", and ENGR 1624: \"\"")
print(re.findall(pattern, s))
輸出
[('CS', '1110', '"Introduction to Programming"'), ('ENGR', '1624', '"Introduction to\nEngineering"'), ('BME', '2220', '"Biomechanics"')]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365134.html
下一篇:Pandas將行作為新列加入
