簡體   English   中英

re.split,除非在Python中跟隨一個整數

[英]re.split unless following character an integer in Python

在以下示例中,使用單個空格作為定界符,通過Python的re.split()將字符串轉換為列表。 如果拆分的以下字符是整數,則不得發生拆分。 我嘗試的代碼對所有> 1的元素的第一個字符執行了另外的錯誤拆分。

哪個正則表達式將生成所需的輸出?

概念輸入:

inString = "key=string key=integer key=(float float float) key=float"

所需輸出:

outList = ['key=string', 'key=integer', 'key=(float float float)', 'key=float']

嘗試輸入的代碼:

outList = re.split("\s([^0-9].*?)", inString)

嘗試輸出的代碼:

['key=abcde', 'k', 'ey=12345', 'k', 'ey=(0.1234 1.2345 2.3456)', 'k', 'ey=0.1234']

您可以嘗試下面的代碼,該代碼使用負前瞻,

>>> import re
>>> s = "key=abc key=123 key=(0.1234 1.2345 2.3456) key=0.1234"
>>> m = re.split(r' (?!\d)', s)
>>> m
['key=abc', 'key=123', 'key=(0.1234 1.2345 2.3456)', 'key=0.1234']

如果不想根據()內的空格分割輸入字符串,也可以嘗試以下代碼。

>>> import re
>>> s = "key=abc key=123 key=(0.1234 1.2345 2.3456 foo bar) key=0.1234 key=123 key=(foo bar)"
>>> m = re.split(r' (?=[^()]*(?:\([^()]*\)|[^()]*$))', s)
>>> m
['key=abc', 'key=123', 'key=(0.1234 1.2345 2.3456 foo bar)', 'key=0.1234', 'key=123', 'key=(foo bar)']

您可以在正則表達式上分割: (?=key)

inString = "key=string key=integer key=(float float float) key=float"
outList = re.split(" (?=key)", inString)
print outList # ['key=string', 'key=integer', 'key=(float float float)', 'key=float']

https://docs.python.org/2/library/re.html

通過模式的出現來分割字符串。 如果在模式中使用了捕獲括號,則模式中所有組的文本也將作為結果列表的一部分返回

暫無
暫無

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

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