[英]Or condition for literal string in regex expression
我有以下正則表達式
re.findall('\(([0-9].*?)\)', a[a.find('('):].strip())
為像這樣的字符串定義
asdasdasd (21345-asdasdasd)
檢索括號內的內容,后跟數字。 但我也希望能夠檢索“ NA”字符串后面的內容,例如:
asdasdasd (NA-asdasdasd)
我試過了:
re.findall('\(([0-9].*?)\)|\((NA.*?)\)', a[a.find('('):].strip())
但產生一個元組。 會怎么樣 先感謝您!
當其中的文本以數字/ NA
開頭,后跟-
以及除(
和)
以外的任何其他字符時,您可以捕獲括號之間的子字符串
re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', a)
參見regex演示 。
細節
\\(
-一個(
((?:[0-9]+|NA)-[^)]*)
-捕獲組(此值將由re.findall
返回):
(?:[0-9]+|NA)
-1個或多個數字或NA
-
連字符 [^)]*
- 0+比其他字符)
\\)
-a )
字符。 參見Python演示 :
import re
strs = ['asdasdasd (21345-asdasdasd)', 'asdasdasd (NA-asdasdasd)']
for s in strs:
print(re.findall(r'\(((?:[0-9]+|NA)-[^)]*)\)', s))
輸出:
['21345-asdasdasd']
['NA-asdasdasd']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.