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++
而不是[^-]+
将适用于您的示例,但是,如果在-
之前您有一个非字母字符,则将不起作用。是的,我在使用您提供的链接时遇到了问题。我正打算求助于此,因为我失去了希望谢谢!因为我失去了希望,所以我打算求助于此谢谢!