Python 不同模式的正则表达式

Python 不同模式的正则表达式,python,regex,python-3.x,pandas,Python,Regex,Python 3.x,Pandas,我有以下字符串 s1 = 'XXX-2 I LOVE : XXX XXX' s2 = 'FOOD : XXX' s3 = 'XXX-FOOD : XXX 我想要以下的 s1 = '2 I LOVE' s2 = 'FOOD' s3 = 'FOOD' s2只有1个分隔符:,而s1和s3有2个-&: 我希望将所有内容都保留在两个分隔符-&:之间,因此我使用了以下\-(.*?):但是我没有得到s2 如果我使用以下\w+\-?(.*?)\:我会在-之前获得所有信息 我在正则表达式方面很糟糕,如果有人能

我有以下字符串

s1 = 'XXX-2 I LOVE : XXX XXX'
s2 = 'FOOD : XXX'
s3 = 'XXX-FOOD : XXX
我想要以下的

s1 = '2 I LOVE'
s2 = 'FOOD'
s3 = 'FOOD'
s2
只有1个分隔符
,而
s1和s3
有2个
-&:

我希望将所有内容都保留在两个分隔符
-&:
之间,因此我使用了以下
\-(.*?):
但是我没有得到
s2

如果我使用以下
\w+\-?(.*?)\:
我会在
-
之前获得所有信息


我在正则表达式方面很糟糕,如果有人能帮我解决这个问题,并提供一个了解正则表达式的链接,我将不胜感激。

以下正则表达式应该适用于您的示例

(?:[^-]+-)?([^:]+):.*

下面的正则表达式应该适用于您的示例

(?:[^-]+-)?([^:]+):.*

我们正在使用
strip
删除尾随空格

s1 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s1).strip()
s2 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s2).strip()
s3 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s3).strip()

2 I LOVE
FOOD
FOOD

我们正在使用
strip
删除尾随空格

s1 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s1).strip()
s2 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s2).strip()
s3 = re.sub(r'[^a-zA-Z0-9\s]+|X','',s3).strip()

2 I LOVE
FOOD
FOOD

您需要的正则表达式是:
(?:\w+-)(.*):

(?:\w+-)?
表示检查类似单词的字符的初始序列
\w
后跟连字符。因为在偏执论中,它后面的问号表示整个部分是可选的,即,要么在行的开头有
\w+
-
,要么两者都不存在。
?:
部分只是告诉Python,您在这里使用parantises
()
只是为了分组,而不是因为您希望捕获和存储匹配的部分

(.*)
-这与我们实际需要的部件相匹配,并将其存储在捕获组编号1中。因此,如果您有
m=re.match(r“(?:\w+-)(*?”,“XXX-2我爱:XXX XXX”)
,那么
m.group(1)
将包含
2我爱

(请注意,
-
通常都不需要正则表达式中的反斜杠转义(
-
需要在
[]
字符类中引用),因此您可以直接将它们写出而不转义。)


您可能会发现这样的工具对于探索和理解正则表达式很有用

您需要的正则表达式是:
(?:\w+-)(.*):

(?:\w+-)?
表示检查类似单词的字符的初始序列
\w
后跟连字符。因为在偏执论中,它后面的问号表示整个部分是可选的,即,要么在行的开头有
\w+
-
,要么两者都不存在。
?:
部分只是告诉Python,您在这里使用parantises
()
只是为了分组,而不是因为您希望捕获和存储匹配的部分

(.*)
-这与我们实际需要的部件相匹配,并将其存储在捕获组编号1中。因此,如果您有
m=re.match(r“(?:\w+-)(*?”,“XXX-2我爱:XXX XXX”)
,那么
m.group(1)
将包含
2我爱

(请注意,
-
通常都不需要正则表达式中的反斜杠转义(
-
需要在
[]
字符类中引用),因此您可以直接将它们写出而不转义。)



您可能会发现这样的工具对于探索和理解正则表达式很有用

s2
没有两个分隔符可供使用?确切地说,我是stucks2的原因不符合您对原始正则表达式的描述,因此不清楚您希望正则表达式保存什么。额外的解释和/或示例是必要的。也许更改有助于
s2
没有两个分隔符可供使用?确切的原因是stucks2不符合您对原始正则表达式的描述,因此不清楚您希望正则表达式保存什么。额外的解释和/或例子是必要的。也许这些变化有助于你如何处理???非常感谢你。这仅仅是经验,还是你介意分享一个好的资源。不客气,regex一开始看起来很吓人,但当你习惯了它,它就会变得很容易。我刚刚写的,但是一个测试正则表达式的好工具是谢谢你谢谢你!!!一开始它看起来很混乱,但我想做得更好。请注意,@Sundar answer对正则表达式有更多的解释,使用
\w++
而不是
[^-]+
将适用于您的示例,但是如果你在
-
之前有一个非字母字符,那就不行了。是的,我在玩你提供给我的链接,遇到了这个问题。老兄,怎么了???非常感谢你。这仅仅是经验,还是你介意分享一个好的资源。不客气,regex一开始看起来很吓人,但当你习惯了它,它就会变得很容易。我刚刚写的,但是一个测试正则表达式的好工具是谢谢你谢谢你!!!一开始它看起来很混乱,但我想做得更好。请注意,@Sundar answer对正则表达式有更多的解释,使用
\w++
而不是
[^-]+
将适用于您的示例,但是,如果在
-
之前您有一个非字母字符,则将不起作用。是的,我在使用您提供的链接时遇到了问题。我正打算求助于此,因为我失去了希望谢谢!因为我失去了希望,所以我打算求助于此谢谢!