正在查找用于变量字符串的正则表达式

2024-09-30 16:34:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个可以稍微改变的字符串:

str1 = "[X] text [Y] abc123"
str1 = "(X ) text [y ]  abc123"
str1 = "(x) text (Y)        abc123"
str1 = "(X ) text   (Y)  abc123"
str1 = "(X ) text [Y ]  abc123"
str1 = "[X]   text333 [y]  abc123222"

所以基本上X和Y是静态的,它们可以在()[]之间。我的问题是,也可能有一些空白。带括号的X和Y可以假定为捕获组1的分隔符。我现在在问自己如何以最可靠的方式解析“text”和“abc123”。你会怎么做?”“text”和“abc123”是变量字符串。我想进一步利用它们


Tags: 字符串text利用方式静态空白括号分隔符
3条回答

怎么样:

[\[)]X[\])]\s*(.+?)\s*[\[(]Y[\])]\s*(.+)

text将在组1中,abc123将在组2中

说明:

[\[)]   : character class `[` or `(`
X       : whatever X stands for
[\])]   : character class `]` or `)`
\s*     : 0 or more space character
(.+?)   : 1 or more any character non greedy, captured in group 1
\s*     : 0 or more space character
[\[(]   : character class `[` or `(`
Y       : whatever X stands for
[\])]   : character class `]` or `)`
\s*     : 0 or more space character
(.+)    : 1 or more any character, captured in group 2
import re

str1 = "( X ) text [Y] abc 123 xyz"

m = re.match( r'^[\(\[][xX ]+[\]\)]\s*(\S*)\s*[\(\[][yY ]+[\]\)]\s*(.*)$', str1)

if m:
   str1text = m.group(1)
   str1moretext = m.group(2)
   print str1text
   print str1moretext
else:
   print "No match!!"

这个怎么样?你知道吗

chars='[]()'
x,text,y,abc123 = ''.join([x for x in str1 if x not in chars]).split()
print(x,text,y,abc123)

相关问题 更多 >