Python 连接由空格和连字符分隔的单词的正则表达式

Python 连接由空格和连字符分隔的单词的正则表达式,python,regex,python-3.x,whitespace,hyphen,Python,Regex,Python 3.x,Whitespace,Hyphen,我的绳子很乱,看起来像这样: s=“我希望渺茫,不能独自解决这个问题。你能帮我吗?” 我希望将连字符(有时是空格)剥离到一个列表中。。期望输出: list=['I'm'、'apowed'、'and'、'cannot'、'solve'、'this'、'problem'、'on'、'my'、'own'、'will'、'you'、'help'、'me'、'?'] 我尝试了很多不同的变体,但都不起作用 rgx=re.compile(([\w][\w'][\w\-]*\w)”) s=“我的字符串” rgx

我的绳子很乱,看起来像这样:

s=“我希望渺茫,不能独自解决这个问题。你能帮我吗?”

我希望将连字符(有时是空格)剥离到一个列表中。。期望输出:

list=['I'm'、'apowed'、'and'、'cannot'、'solve'、'this'、'problem'、'on'、'my'、'own'、'will'、'you'、'help'、'me'、'?']

我尝试了很多不同的变体,但都不起作用

rgx=re.compile(([\w][\w'][\w\-]*\w)”)
s=“我的字符串”

rgx.findall(s)

快速、非正则的方法

''.join(map(lambda s: s.strip(), s.split('-'))).split()

这就是在连字符上拆分,去掉额外的空格,重新连接到字符串中,然后在空格上拆分,但这并不能分隔圆点或问号。

快速、非正则表达式的方法是

''.join(map(lambda s: s.strip(), s.split('-'))).split()
这是在连字符上拆分,去掉额外的空格,重新连接到字符串中,然后在空格上拆分,但这不会分隔圆点或问号。

这里有一种方法:

[re.sub(r'\s*-\s*', '', i) for i in re.split(r'(?<!-)\s(?!-)', s)]

# ["I'm", 'hopeless', 'and', 'cannot', 'solve', 'this', 'problem', 'on', 'my', 'own.', 'Would', 'you', 'help', 'me?']
捕获的内容还包括拆分非字母、非空格和非连字符/撇号。由于拆分可能会返回一些
None
项,因此
if i
是必需的。

这里有一种方法:

[re.sub(r'\s*-\s*', '', i) for i in re.split(r'(?<!-)\s(?!-)', s)]

# ["I'm", 'hopeless', 'and', 'cannot', 'solve', 'this', 'problem', 'on', 'my', 'own.', 'Would', 'you', 'help', 'me?']
捕获的内容还包括拆分非字母、非空格和非连字符/撇号。由于拆分可能会返回一些
None
项,因此
if i
是必需的。

这个如何:

>>> s
"I'm hope-less and can -not solve this pro- blem on my own. Wo - uld you help me
?"
>>> list(map(lambda x:re.sub(' *- *','',x), filter(lambda x:x, re.split(r'(?<!-) +(?!-)|([.?])',s))))
["I'm", 'hopeless', 'and', 'cannot', 'solve', 'this', 'problem', 'on', 'my', 'own', '.', 'Would', 'you', 'help', 'me', '?']
(?表示前后没有
-
的空格。
[.?]
表示单个

re.split(r'(?这个怎么样:

>>> s
"I'm hope-less and can -not solve this pro- blem on my own. Wo - uld you help me
?"
>>> list(map(lambda x:re.sub(' *- *','',x), filter(lambda x:x, re.split(r'(?<!-) +(?!-)|([.?])',s))))
["I'm", 'hopeless', 'and', 'cannot', 'solve', 'this', 'problem', 'on', 'my', 'own', '.', 'Would', 'you', 'help', 'me', '?']
(?表示前后没有
-
的空格。
[.?]
表示单个


re.split(r'(?Try
r”\w+(?:'\w+)|[^\s\w]+“
谢谢,但这只能部分解决我的问题..我想把“无希望”和“问题”作为我列表中的一项:例如,“问题”啊,对不起,我在手机上查看问题时错过了。我想你需要一些预处理,比如
re.sub(r'\b\s*-\s*\b','',s)
,但由于正则表达式不“知道”英语,而且这很容易删除字符之间的连字符,它可能会删除太多。s=s.replace('-','')。replace('-','')。replace('-','')。replace('-','')。replace(',')。split(','))尝试
r'\w+(?:'\w+)[^\s\w]+”
谢谢,但这只能部分解决我的问题..我想把“无希望”和“问题”作为我列表中的一项:例如,“问题”啊,对不起,我在手机上查看问题时错过了。我想你需要一些预处理,比如
re.sub(r'\b\s*-\s*\b','',s)
,但因为regex不“知道”在英语中,这很明显地删除了字符之间的连字符,它可能会删除太多。s=s.replace('-','')。replace('-','')。replace('-','')。replace('-','')。replace('-','')。split(','))对于downvoter,请在您进行否决投票之前对这个答案进行评论。据我所知,我认为这种方法没有任何重大问题。出于某种原因,我在regex标签上看到了很多关于问题和答案的否决票。不知道为什么我没有被否决,但我认为您的输出与OP的
De有点不同想要的输出
@Sundeep可能是由于对regex的大量误用…很多问题都是针对一个不需要它的regex解决方案提出的,或者提供的一些regex解决方案只是优化得很差。我承认我自己不是一个regex专家,这就是为什么我希望其他人指出这个问题并帮助我学习,而不仅仅是走路投反对票。@Tiw good point,我没有注意到
也是分开的。鉴于这一点被接受,我会看看OP是否会回复评论并相应更新。对于投反对票的人,如果在投反对票之前对这个答案进行评论,我将不胜感激。据我所知,我看不出有任何重大影响这种方法存在问题。出于某种原因,我在regex标签上看到了很多问题和答案的否决票。不知道为什么我没有否决,但我认为您的输出与OP的
期望输出
@Sundeep有一点不同,可能是因为对regex的大量误用…很多问题都需要一个不需要任何支持的regex解决方案它,或者提供的一些正则表达式解决方案优化得很糟糕。我承认我自己不是正则表达式专家,这就是为什么我希望其他人能指出问题并帮助我学习,而不是只是投反对票就走。@Tiw good point,我没有注意到
也是分开的。因为这是accep特德,我会看看OP是否会回复评论和相应的更新。