python - 匹配从开头到多字符子字符串第一次出现的一段文本

标签 python regex

我希望正则表达式搜索在到达“.”时结束,而不是在到达“.”时结束;我知道使用 [^...] 来排除单个字符,并且一直使用它来在到达某个字符时停止我的搜索。但这不适用于字符串,如 [^. ] 在到达任一字符时停止。假设我有代码

import re

def main():
    my_string = "The value of the float is 2.5. The int's value is 2.\n"
    re.search("[^.]*", my_string)

main()

这给出了一个与字符串匹配的对象

“ float 的值为2”

如何更改它,使其仅在字符串“.”之后停止?

额外的问题,有没有办法告诉正则表达式在到达多个字符串之一时停止?以上面的代码为例,如果我希望搜索在找到字符串“.”或字符串“.\n”时结束,我该怎么做呢?谢谢!

最佳答案

要从字符串开头到 . 后跟空格进行匹配,请使用

^(.*?)\.\s

如果您只想在点后需要一个空格或换行符,请使用其中之一(如果您只有单个字符,则第二个最好,如果有多字符替代,请使用交替)

^(.*?)\.(?: |\n)
^(.*?)\.[ \n]

请参阅regex demo .

详细信息

  • ^ - 字符串的开头
  • (.*?) - 捕获组 1:除换行符之外的任何 0+ 个字符,尽可能少
  • \. - 文字 . char
  • \s - 空白字符
  • (?: |\n)/[\n] - 匹配空格或 (|) 的非捕获组换行符。

Python demo :

import re

my_string = "The value of the float is 2.5. The int's value is 2.\n"
m = re.search("^(.*?)\.\s", my_string) # Try to find a match
if m:                                  # If there is a match
    print(m.group(1))                  # Show Group 1 value

注意如果输入中可以有换行符,请传递 re.Sre.DOTALL 标志:

m = re.search("^(.*?)\.\s", my_string, re.DOTALL)

关于python - 匹配从开头到多字符子字符串第一次出现的一段文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56761788/

相关文章:

java - 我想替换以 # 开头的字符串中的内容,如果它以 !# 开头,则必须跳过它

regex - 列出各种范围内的所有数字(1 - 6;1、2、5 和 23;等)

python - Turtle.goto 错误

php - Python长轮询服务器(与现有PHP服务器相同)

python - 删除字符串末尾的空格但保留新行符号

python - Twython OAuth1 问题,使用示例代码时出现 401 错误

ruby-on-rails - 自动检测字符串中的值类型,以便将 URL、电子邮件地址、

正则表达式,获取字符串第二次出现后的内容

R strsplit 使用正则表达式

python - 如何在不创建本地副本的情况下从在线 gzip 文件中读取数据?