我试图处理字符串输入。起初我加入了\n
的输入,所以我可以将每个单词放在一行(这就是我需要的):
some
random
words
written
并将其转换为以下内容:
s o m e
r a n d o m
w o r d s
w r i t t e n
但由于某些原因,我在一行的开头得到随机空格但不是每一行。输入中有零空格,我具体检查过。我不确定这些额外空间的来源。
这是我的代码:
input = "some random words written"
string = '\n'.join(re.findall(r"\w{4,}", input)) #regex bc I need the words to be at least 4 characters
space = " ".join(string)
print(space)
这给了我这样的东西:
s o m e
r a n d o m
w o r d s
w r i t t e n
任何人都可能知道为什么?
答案 0 :(得分:2)
我不会为此使用正则表达式。
[x for x in input.split() if len(x) > 3]
...将过滤少于4个字符的单词。
[' '.join(y) for y in [x for x in input.split() if len(x) > 3]]
...将把它变成一个"单词列表"每个单词"间隔开。"
所以你可以用:
完成所有工作'\n'.join([' '.join(y) for y in [x for x in input.split() if len(x) > 3]])
通常最好使用迭代"自下而上"来构建功能代码片段。我在这里展示的方法。正则表达式往往很慢而且有些危险。您依赖于复杂而复杂的解析器集来解释和应用正则表达式。当你可以避免它们时,通常这样做很好。代码可能运行得更快,更强大。
答案 1 :(得分:0)
试试这个:
'\n'.join(' '.join(i) for i in text.split() if len(i) >= 4)
首先,找到大于或等于四个字母的所有单词。
接下来按空格加入这些单词。由于str
是可迭代的,因此它会在每个字母之间放置一个空格。
然后按\n
加入,你就完成了!
>>> text = "some random words written"
>>> print('\n'.join(' '.join(i) for i in text.split() if len(i) >= 4))
s o m e
r a n d o m
w o r d s
w r i t t e n
您的解决方案不起作用的原因是因为它在换行符和新字符之间放置了一个空格。 join
将空格放在每个字符之间。
答案 2 :(得分:0)
你可以用1个生成器和没有正则表达式来做到这一点:
strg = "some random words written"
print('\n'.join(' '.join(word) for word in strg.split() if len(word) > 3))
的启动方式与this answer相同;我的非常相似,但是我得到了一个更短的解决方案,我还发布了它......
和input
是内置的;避免将它们作为变量名称。
答案 3 :(得分:0)
您可以使用list comprehension代替regex
,即:
print("\n".join(' '.join(x) for x in input.split() if len(x) > 3 ))
如果您确实需要regex
,请使用:
print("\n".join(' '.join(x) for x in re.findall('\w{4,}', input)))
输出:
s o m e
r a n d o m
w o r d s
w r i t t e n