简体   繁体   English

Python Regex将(A] [B] [C] [D)分成新行

[英]Python Regex split (A)(B)(C)(D) into new lines

I write a regex to separate choices into new lines, 我写了一个正则表达式将选项分成新行,

(?P<qn>^\d+)\s*?\.(?P<qt>.*?)\s*?(?P<A>A\s*?\..*?)\n*?(?P<B>B\s*?\..*?)\n*?(?P<C>C\s*?\..*?)\n*?(?P<D>D\s*?\..*?)\n*(?=\Z)

See https://www.regex101.com/r/hP0nX4/2 参见https://www.regex101.com/r/hP0nX4/2

14.下列牙齒外傷,何者最易發生牙髓壞死?

A.震盪(concussion) 
B.半脫臼(subluxation) 
C.凸出性脫位(extrusive luxation) 
D.內縮性脫位(intrusive luxation)

15  .藥物在正常使用下,何種藥品對
Enterococcus faecalis 的殺菌效果通常最快?
A.2.5%次氯酸鈉(NaOCl) B.0.5%chlorhexidine C.2%iodine/4%potassium iodide D.氫氧化鈣(Ca(OH)2)

16  .有關根管治療時使用EDTA移除塗抹層(smear      layer)之敘述,下列何者錯誤?
A.臨床上常使用的EDTA濃度為27% B.其作用為EDTA與牙本質碎屑中的鈣離子螯合(chelating),來幫助移除塗抹層 C.EDTA可深入牙本質小管約50µm D.EDTA與次氯酸鈉(NaOCl)併用可移除塗抹層

The question No. 14 is well formatted, No.15 & 16 are not. 第14号问题的格式正确,第15号和16号问题的格式不正确。

My regex only match one question, how can I make it to match all questions. 我的正则表达式只匹配一个问题,我该如何匹配所有问题。 And separate all choices into new line? 并将所有选择都分成新行?


My expected output is: 我的预期输出是:

14.下列牙齒外傷,何者最易發生牙髓壞死?

A.震盪(concussion) 
B.半脫臼(subluxation) 
C.凸出性脫位(extrusive luxation) 
D.內縮性脫位(intrusive luxation)

15  .藥物在正常使用下,何種藥品對
Enterococcus faecalis 的殺菌效果通常最快?
A.2.5%次氯酸鈉(NaOCl) 
B.0.5%chlorhexidine 
C.2%iodine/4%potassium iodide 
D.氫氧化鈣(Ca(OH)2)

16  .有關根管治療時使用EDTA移除塗抹層(smear      layer)之敘述,下列何者錯誤?
A.臨床上常使用的EDTA濃度為27% 
B.其作用為EDTA與牙本質碎屑中的鈣離子螯合(chelating),來幫助移除塗抹層
C.EDTA可深入牙本質小管約50µm 
D.EDTA與次氯酸鈉(NaOCl)併用可移除塗抹層

Just repace the space which exists before B or C or D . 只需掩盖BCD之前的空间即可. with newline character. 与换行符。

re.sub(r'\s+(?=[BCD]\.)', '\n', s)

DEMO 演示

Example: 例:

>>> s = '''14.下列牙齒外傷,何者最易發生牙髓壞死?

A.震盪(concussion) 
B.半脫臼(subluxation) 
C.凸出性脫位(extrusive luxation) 
D.內縮性脫位(intrusive luxation)

15  .藥物在正常使用下,何種藥品對
Enterococcus faecalis 的殺菌效果通常最快?
A.2.5%次氯酸鈉(NaOCl) B.0.5%chlorhexidine C.2%iodine/4%potassium iodide D.氫氧化鈣(Ca(OH)2)

16  .有關根管治療時使用EDTA移除塗抹層(smear      layer)之敘述,下列何者錯誤?
A.臨床上常使用的EDTA濃度為27% B.其作用為EDTA與牙本質碎屑中的鈣離子螯合(chelating),來幫助移除塗抹層 C.EDTA可深入牙本質小管約50µm D.EDTA與次氯酸鈉(NaOCl)併用可移除塗抹層'''

>>> print(re.sub(r'\s+(?=[BCD]\.)', '\n', s))
14.下列牙齒外傷,何者最易發生牙髓壞死?

A.震盪(concussion)
B.半脫臼(subluxation)
C.凸出性脫位(extrusive luxation)
D.內縮性脫位(intrusive luxation)

15  .藥物在正常使用下,何種藥品對
Enterococcus faecalis 的殺菌效果通常最快?
A.2.5%次氯酸鈉(NaOCl)
B.0.5%chlorhexidine
C.2%iodine/4%potassium iodide
D.氫氧化鈣(Ca(OH)2)

16  .有關根管治療時使用EDTA移除塗抹層(smear      layer)之敘述,下列何者錯誤?
A.臨床上常使用的EDTA濃度為27%
B.其作用為EDTA與牙本質碎屑中的鈣離子螯合(chelating),來幫助移除塗抹層
C.EDTA可深入牙本質小管約50µm
D.EDTA與次氯酸鈉(NaOCl)併用可移除塗抹層

There is a newline before "Enterococcus" that is not matched by . “ Enterococcus”之前有一个换行符,与不匹配. You can add the modifier s to make . 您可以添加修改s. also match newlines. 也匹配换行符。

Note that the newline will still be in the result though. 注意,换行符仍然会出现在结果中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM