使用Regex [duplicate]匹配单词前面有空格的单词

ie3xauqp  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(84)

此问题在此处已有答案

Regex: Specify "space or start of string" and "space or end of string"(4个答案)
13天前关门了。
我刚刚开始在Python中使用Regex进行NLP项目,发现有些事情有点难以理解。
我正在尝试匹配字符串中前面有空格/没有空格的单词。
我的代码:

my_string_one = "Hello, my name is Sam! I'm going to be walking through some Regex concepts."

print(re.findall(r'\s[A-Z][a-z]+', my_string_one))

字符串
退货:

[' Sam', ' Regex']


然而,正如预期的那样:

print(re.findall(r'\S[A-Z][a-z]+', my_string_one))


退货:

[ ]


我希望它只是返回字符串中的第一个“Hello”,因为我要求它匹配一个模式,前面没有空格,后面是一个大写字母和一些小写字母。
这不是我试图找到匹配第一个单词的方法的情况,这是微不足道的,而是要理解为什么这个模式不像我期望的那样匹配?

pprl5pva

pprl5pva1#

你可以使用一个否定的lookbehindAssert(?<!...),它只在当前位置 * 前面没有 * 特定模式时才匹配。
在您的例子中,您可以使用(?<!\s),它Assert位置 * 不 * 匹配空格,但不要求它像\S那样匹配非空格字符。

print(re.findall(r'(?<!\s)[A-Z][a-z]+', my_string_one))

字符串
产出:

['Hello']

nzk0hqpo

nzk0hqpo2#

您的r'\S[A-Z][a-z]+'正则表达式及其空结果是正确的。
您可能希望提供一个更有趣的输入字符串,例如"deBruijn",它将选择"eBruijn"
或者,也许你不满意你的“字符串中没有空格的单词”规范。如果你不需要返回一个空格字符作为结果的一部分,你可能更喜欢在正则表达式中使用\b(单词边界):r'\b[A-Z][a-z]+'
https://docs.python.org/3/library/re.html
\b
匹配空字符串,但仅在单词的开头或结尾。

相关问题