Python 正则表达式是编写包含单词和句子的代码的更好方法吗?

Python 正则表达式是编写包含单词和句子的代码的更好方法吗?,python,Python,我想定义一个函数,它接受一个句子并返回长度至少为4且小写的单词。问题是,我对Python非常陌生,我不太确定如何让代码处理单词而不是整数。我目前的代码如下: def my_function(s): sentence = [] for word in s.split(): if len(word) >=4: return (word.lower()) 如果我我的功能(“比尔的狗出生于2010年”)我希望[“比尔”,“出生”]我的代码输

我想定义一个函数,它接受一个句子并返回长度至少为4且小写的单词。问题是,我对Python非常陌生,我不太确定如何让代码处理单词而不是整数。我目前的代码如下:

def my_function(s):
    sentence = []
    for word in s.split():
        if len(word) >=4:
            return (word.lower())
如果我
我的功能(“比尔的狗出生于2010年”)
我希望
[“比尔”,“出生”]
我的代码输出
“比尔的”

从我在StackOverflow和Python教程中看到的情况来看,正则表达式可以帮助我,但我不完全理解模块中发生了什么。你们能解释一下正则表达式有什么帮助吗,如果可以的话?

返回的第一个单词是4个字符或更长,而不是所有这样的单词。附加到
句子
并返回以下内容:

def my_function(s):
    sentence = []
    for word in s.split():
        if len(word) >=4:
           sentence.append(word.lower())
    return sentence
您可以通过列表来简化:

def my_function(s):
    return [word.lower() for word in s.split() if len(word) >= 4]

是的,正则表达式也可以做到这一点,但对于您的情况来说,这可能有些过分。

您的要求有点不一致,因此我将使用您的示例作为参考

In [27]: import re

In [28]: s = "Bill's dog was born in 2010"

In [29]: [w.lower() for w in re.findall(r'\b[A-Za-z]{4,}\b', s)]
Out[29]: ['bill', 'born']
让我们看看正则表达式,
r'\b[a-Za-z]{4,}\b'

r'…'
不是正则表达式的一部分。这是一个名为a的Python构造。它就像一个普通的字符串文字,除了像这样的反斜杠序列没有它们通常的含义

两个
\b
查找单词边界(即单词的开头或结尾)

[A-Za-z]{4,}
查找四个或更多字母的序列。
[A-Za-z]
称为字符类,由字母
A
z
A
z
组成。
{4,}
是一个重复运算符,要求字符类至少匹配四次


最后,列表理解,
[w.lower()for w in…]
将单词转换为小写。

是的,正则表达式将是实现所需内容的最简单和最简单的方法

试试这个正则表达式:

matches = re.findall(ur"\b[a-zA-Z]{4,}\b", "Put Your String Here") #matches [Your,String,Here]

你忘了把“句子”中的长单词累加起来而是使用re.split返回第一个

>>> import re
>>> a='Hi, how are you today?'
>>> [x for x in re.split('[^a-z]', a.lower()) if len(x)>=4]
['today']
>>> 

…但它不是小写,这是问题中的一个要求。“我希望
[“bill”,“born”]
”但早些时候你说单词必须至少长度为4,并且是小写的。“Bill”不全是小写的,那么你为什么期望它呢?我更喜欢使用re.split。string.split会因为“你好吗?”而失败。@shantanoo:也许吧,但我的答案说明了OP在没有正则表达式的情况下犯了什么错误。