[英]Python split string with split character and escape character
在 python 中,如何通過以下規則集使用正則表達式拆分字符串:
;
):
)轉義,則不要拆分。所以分裂
"foo;bar:;baz::;one:two;::three::::;four;;five:::;six;:seven;::eight"
應該產生
["foo", "bar:;baz::", "one:two", "::three::::", "four", "", "five:::;six", ":seven", "::eight"]
我自己的嘗試是:
re.split(r'(?<!:);', str)
哪個不能處理規則#3
如果匹配也是一個選項,並且空匹配''
不是必需的:
(?::[:;]|[^;\n])+
(?:
非捕獲組
:[:;]
匹配:
后跟:
或;
|
或者[^;\n]
匹配除;
以外的任何字符 1 次以上或換行符)+
關閉非捕獲組並重復 1+ 次import re
regex = r"(?::[:;]|[^;\n])+"
str = "foo;bar:;baz::;one:two;::three::::;four;;five:::;six;:seven;::eight"
print(re.findall(regex, str))
Output
['foo', 'bar:;baz::', 'one:two', '::three::::', 'four', 'five:::;six', ':seven', '::eight']
如果您想要空匹配,您可以添加 2 個環視來獲得 position 有一個;
向左和向右
(?::[:;]|[^;\n]|(?<=;)(?=;))+
您可以使用具有以下模式的regex
模塊進行拆分:
(?<!:)(?:::)*\K;
查看在線演示
(?<::)
- 消極的后視。(?:::)*
- 0+ 乘以 2 個文字冒號的非捕獲組。\K
- 重置報告匹配的起點。;
- 文字分號。例如:
import regex as re
s = 'foo;bar:;baz::;one:two;::three::::;four;;five:::;six;:seven;::eight'
lst = re.split(r'(?<!:)(?:::)*\K;', s)
print(lst) # ['foo', 'bar:;baz::', 'one:two', '::three::::', 'four', '', 'five:::;six', ':seven', '::eight']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.