簡體   English   中英

匹配特定模式的正則表達式

[英]Regular expression to match a specific pattern

我有以下字符串:

s = "<X> First <Y> Second"

我可以在<X><Y>之后匹配任何文本(在這種情況下是“第一”和“第二”)。 這就是我已經做到的:

import re
s = "<X> First <Y> Second"
pattern = r'\<([XxYy])\>([^\<]+)'  # lower and upper case X/Y will be matched
items = re.findall(pattern, s)
print items
>>> [('X', ' First '), ('Y', ' Second')]

我現在試圖匹配的是沒有<>的情況:

s = "X First Y Second"

我試過這個:

pattern = r'([XxYy]) ([^\<]+)'
>>> [('X', ' First Y Second')]

不幸的是,它沒有產生正確的結果。 我究竟做錯了什么? 我想匹配 X 或 x 或 Y 或 y 加上一個空格(例如“X”)。 我怎樣才能做到這一點?

編輯:這也是一個可能的字符串:

s = "<X> First one <Y> Second <X> More <Y> Text"

輸出應該是:

 >>> [('X', ' First one '), ('Y', ' Second '), ('X', ' More '), ('Y', ' Text')]

編輯2:

pattern = r'([XxYy]) ([^ ]+)'
s = "X First text Y Second"

產生:

[('X', 'First'), ('Y', 'Second')]

但它應該是:

[('X', 'First text'), ('Y', 'Second')]

怎么樣: <?[XY]>? ([^<>XY$ ]+) <?[XY]>? ([^<>XY$ ]+)

javascript中的示例:

 const re = /<?[XY]>? ([^<>XY$ ]+)/ig console.info('<X> First <Y> Second'.match(re)) console.info('X First Y Second'.match(re))

如果您知道要匹配哪個空白字符,則可以將其添加到您的表達式中。 如果你想匹配任何空格,你可以使用 \\s

pattern = r'\<([XxYy])\>([^\<]+)'

那么將是

pattern = r'\<([XxYy])\>\s([^\<]+)'

始終記住 () 中的表達式將作為您的結果返回。

假設要匹配的空白標記是單個空格字符,則模式為:

pattern = r'([XxYy]) ([^ ]+)'

所以我想出了這個解決方案:

pattern = r"([XxYy]) (.*?)(?= [XxYy] |$)"

暫無
暫無

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

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