簡體   English   中英

使用正則表達式從文本中提取類別

[英]Extract categories from text using regular expression

我是在python中使用正則表達式的新手。 我在弄清楚如何執行以下操作時遇到了麻煩:

我有一堆像字符串這樣的文本描述,如下所示:

FX0XST001ALF89  OLIGO: Bacillus_cand1=ATGCGGTTCAAAATGTTATC      
FILE:/home/AAFC-AAC/fungs/biodiversity/pipelines/454PipelineOutput/v7_newest_testrun_full/rs75/plate1/FX0XST001.MID13/FX0XST001.MID13.sff.trim.fasta    
Project: SAGES  SFF: FX0XST001  SFF.MID: FX0XST001.MID13    
Plate: 1.1     MID_all: MID13   MID: 13 Sample: BK104   
Collector: BK   Year: 2008  Week:   Year_Week:  
Location: Ottawa_ON     City: Ottawa    Province: ON    Crop:   
Treatment:    Substrate_all: Air    Substrate: Air  Target: Bacteria    
Forward Primer: Bac16S27F   Reverse Primer: Bac16S690R  Taq: T

我希望能夠提取此大字符串中的類別並將其存儲到數據庫中,例如:

Year: 2008
Sample: BK104
Collector: BK

etc...

如何在python中使用正則表達式來實現這一目標?

我正在考慮使用搜索:

match = re.search(r'Sample:\w\w\w\w\w', theTextDescription)

問題在於每個“字段”中文本的長度不同。 我真的不知道該如何考慮

像這樣,您可以使用\\w+來匹配任意長度的字符:

In [37]: strs
Out[37]: 'FX0XST001ALF89  OLIGO: Bacillus_cand1=ATGCGGTTCAAAATGTTATC      \nFILE:/home/AAFC-AAC/fungs/biodiversity/pipelines/454PipelineOutput/v7_newest_testrun_full/rs75/plate1/FX0XST001.MID13/FX0XST001.MID13.sff.trim.fasta    \nProject: SAGES  SFF: FX0XST001  SFF.MID: FX0XST001.MID13    \nPlate: 1.1     MID_all: MID13   MID: 13 Sample: BK104   \nCollector: BK   Year: 2008  Week:   Year_Week:  \nLocation: Ottawa_ON     City: Ottawa    Province: ON    Crop:   \nTreatment:    Substrate_all: Air    Substrate: Air  Target: Bacteria    \nForward Primer: Bac16S27F   Reverse Primer: Bac16S690R  Taq: T'

In [38]: re.findall(r"\w+:\s\w+",strs)
Out[38]: 
['OLIGO: Bacillus_cand1',
 'Project: SAGES',
 'SFF: FX0XST001',
 'MID: FX0XST001',
 'Plate: 1',
 'MID_all: MID13',
 'MID: 13',
 'Sample: BK104',
 'Collector: BK',
 'Year: 2008',
 'Location: Ottawa_ON',
 'City: Ottawa',
 'Province: ON',
 'Substrate_all: Air',
 'Substrate: Air',
 'Target: Bacteria',
 'Primer: Bac16S27F',
 'Primer: Bac16S690R',
 'Taq: T']

或者可以將其存儲在字典中:

In [39]: dict(x.split(":") for x in  re.findall(r"\w+:\s\w+",strs))
Out[39]: 
{'City': ' Ottawa',
 'Collector': ' BK',
 'Location': ' Ottawa_ON',
 'MID': ' 13',
 'MID_all': ' MID13',
 'OLIGO': ' Bacillus_cand1',
 'Plate': ' 1',
 'Primer': ' Bac16S690R',
 'Project': ' SAGES',
 'Province': ' ON',
 'SFF': ' FX0XST001',
 'Sample': ' BK104',
 'Substrate': ' Air',
 'Substrate_all': ' Air',
 'Taq': ' T',
 'Target': ' Bacteria',
 'Year': ' 2008'}

利用正則表達式語言的量詞:

? = 0或1

* = 0或更大

+ = 1或更多

match = re.search(r'Sample:\s\w+', theTextDescription)

暫無
暫無

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

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