簡體   English   中英

帶有特殊字符的Python正則表達式

[英]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.

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