想使用正则表达式来获取一段文本中的任意字符,写出如下匹配规则:
(.*)
结果运行之后才发现,无法获得换行之后的文本。于是查了一下手册,才发现正则表达式中,“.”(点符号)匹配的是除了换行符“\n”以外的所有字符。
以下为正确的正则表达式匹配规则:
([\s\S]*) eg:
m1 = re.findall(r'<!\[CDATA\[select([\s\S]*?)\]\]></Query', source_txt) ps: ? 添加才能有多次匹配,不然只会匹配一次
ps: ( ) 代表被捕获
eg: 获取
“and r.date >= '2024-01-01'
and sd.begin_date <= '2024-08-06'” 中的 r 和 sd
就这么写:
r'\band\s+(\w+)\.'
解释:
-
\b
:表示单词边界,确保匹配的字符串是独立的单词,而不是其他单词的一部分。 -
and
:字面字符串 “and”。 -
\s+
:匹配一个或多个空白字符(空格、制表符、换行符等)。 -
(\w+)
:(
开始一个捕获组。\w
匹配任何单词字符(字母、数字或下划线)。+
表示一个或多个前面的元素,所以\w+
匹配一个或多个单词字符。)
结束捕获组。
-
\.
:匹配字面字符点(.
)。在正则表达式中,点通常用于匹配任意字符,但在这里它被转义(\
),所以它只匹配字面上的点字符。
同时,也可以用 “([\d\D]*)”、“([\w\W]*)” 来表示。 Web技术之家_www.waweb.cn
在文本文件里, 这个表达式可以匹配所有的英文
/[ -~]/
#正则匹配一段文字中的所有中文
import re
string = 'aaddaweh大大的无ausdy五千股qeas华盛顿哈刚过去而过千万股ads'
result = re.findall(u"[\u4e00-\u9fa5]+",string)
print(result)
# b = re.compile(u"\|[\u4e00-\u9fa5]*\|")
# c = b.findall(string)
# print(c)
Python中正则:
. 所有字符,包括数字、汉字、空格,即除了 \n 换行符之外
\d 所有数字,PS:如果数字中包含小数点,[\d\.]+
+ 控制其前边的匹配次数,+ 只能出现 1次或多次,eg:zo+ 匹配到 zo 和 zoo,不能匹配 z;也可写为:{1,}
* 控制其前边的匹配次数,* 只能出现 0次或多次,eg:zo* 匹配到 z 和 zo 和 zoo ;也可写为:{0,}
? 控制其前边的匹配次数,? 只能出现 0次 或 1次,eg:zo+ 匹配到 z 和 zo ,但不能匹配 zoo ;也可写为:{0,1}
{m,n} 控制其前边的匹配次数;最少匹配 m 次,最多 n 次; m<n
+? 或 *? 或 ?? 非贪婪匹配,匹配到 立马结束,不会再往后继续匹配
| 起到连接作用,连接两个表达式,