我希望正则表达式搜索在到达“.”时结束,而不是在到达“.”时结束;我知道使用 [^...]
来排除单个字符,并且一直使用它来在到达某个字符时停止我的搜索。但这不适用于字符串,如 [^. ]
在到达任一字符时停止。假设我有代码
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]
- 匹配空格或 (|
) 的非捕获组换行符。
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.S
或 re.DOTALL
标志:
m = re.search("^(.*?)\.\s", my_string, re.DOTALL)
关于python - 匹配从开头到多字符子字符串第一次出现的一段文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56761788/