[英]Python Regular Expression with special characters
編寫健壯的正則表達式以從字符串中獲取信息時遇到麻煩。
$ string1 = 'A_XYZ_THESE_WORDS'
$ string2 = 'A_ABC_THOSE_WORDS'
我想要一個健壯的解決方案,從string1或string2分別拉出'THESE_WORDS'或'THOSE_WORDS'。
基本上,我需要刪除前兩個下划線(_)之前的所有內容的內容,但它們之前的文本會有所不同。
$ get_text = re.search('(?<=A_)\w+(_)',string1)
$ print get_text.group()
$ 'XYZ_THESE_'
根據您的問題陳述:
我需要能夠刪除前兩個下划線之前所有內容的內容
您不一定需要使用正則表達式:
>>> string1 = 'A_XYZ_THESE_WORDS'
>>> string1.split("_", 2)[2]
'THESE_WORDS'
str.split
的第二個參數是最大拆分次數。 這將在前兩個'_'
上分割,然后從結果列表中獲取第三項(字符串的其余部分)。
如果字符串中的下划線少於兩個,這將引發IndexError
這使您知道該字符串不是您期望的格式,但是如果這種行為不受歡迎,請考慮:
>>> string1 = 'A_XYZ_THESE_WORDS'
>>> string1.split("_", 2)[-1]
'THESE_WORDS'
它從str.split
中獲取列表中的最后一項,而不是假設會有三項。 比較:
>>> "JUST_ONE".split("_", 2)[2]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
"JUST_ONE".split("_", 2)[2]
IndexError: list index out of range
>>> "JUST_ONE".split("_", 2)[-1]
'ONE'
下面的正則表達式將打印第二個下划線(_)之后的文本,
>>> import re
>>> string1 = 'A_XYZ_THESE_WORDS'
>>> string2 = 'A_ABC_THOSE_WORDS'
>>> m = re.search(r'^[^_]*_[^_]*_(.*)$', string1)
>>> m.group(1)
'THESE_WORDS'
>>> m = re.search(r'^[^_]*_[^_]*_(.*)$', string2)
>>> m.group(1)
'THOSE_WORDS'
In [21]: regex = re.compile(r'^([a-zA-Z]+_){2}(.*)$')
In [22]: m = regex.search(string1)
In [23]: m.groups()
Out[23]: ('XYZ_', 'THESE_WORDS')
In [24]: m = regex.search(string2)
In [25]: m.groups()
Out[25]: ('ABC_', 'THOSE_WORDS')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.