此问题在此处已有答案:
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”,因为我要求它匹配一个模式,前面没有空格,后面是一个大写字母和一些小写字母。
这不是我试图找到匹配第一个单词的方法的情况,这是微不足道的,而是要理解为什么这个模式不像我期望的那样匹配?
2条答案
按热度按时间pprl5pva1#
你可以使用一个否定的lookbehindAssert
(?<!...)
,它只在当前位置 * 前面没有 * 特定模式时才匹配。在您的例子中,您可以使用
(?<!\s)
,它Assert位置 * 不 * 匹配空格,但不要求它像\S
那样匹配非空格字符。字符串
产出:
型
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
个匹配空字符串,但仅在单词的开头或结尾。