Python 单词边界,以匹配开始/结束处包含点(.)的字符串

Python 单词边界,以匹配开始/结束处包含点(.)的字符串,python,regex,word-boundary,Python,Regex,Word Boundary,我有一个正则表达式来匹配长文本中的单词,如下所示: word=“word” text=“word子单词” def char_regex_ascii(字): 返回r“\b{}\b”.format(关于转义(word)) r=re.compile(my_regex(word),flags=re.X | re.UNICODE) 对于r.finditer中的m(文本): 打印(m) 输出: word word (nothing) w.o.r.d. \b的原因是我不想找到子字符串,而是想找到完整的

我有一个正则表达式来匹配长文本中的单词,如下所示:

word=“word”
text=“word子单词”
def char_regex_ascii(字):
返回r“\b{}\b”.format(关于转义(word))
r=re.compile(my_regex(word),flags=re.X | re.UNICODE)
对于r.finditer中的m(文本):
打印(m)
输出:

word
word
(nothing)
w.o.r.d.
\b
的原因是我不想找到子字符串,而是想找到完整的单词:例如,我不想匹配文本
子单词中的单词
word
,但我只想要完整的单词作为结果,后面或后面是空格、逗号、点或任何标点

它适用于大多数情况,但如果我在单词末尾插入点a,如
w.o.r.d.
,则不匹配,因为正则表达式的最后一个
\b
在点之后

word=“w.o.r.d.”
text=“w.o.r.d.子单词”
def char_regex_ascii(字):
返回r“\b{}\b”.format(关于转义(word))
r=re.compile(my_regex(word),flags=re.X | re.UNICODE)
对于r.finditer中的m(文本):
打印(m)
输出:

word
word
(nothing)
w.o.r.d.
我知道使用
\B
可以让它工作,但是我应该在句子的开头和结尾做一些检查,尝试所有
\B
\B
的组合来查找许多单词

word=“w.o.r.d.”
text=“w.o.r.d.子单词”
def char_regex_ascii(字):
返回r“\b{}\b”.format(关于转义(word))
r=re.compile(my_regex(word),flags=re.X | re.UNICODE)
对于r.finditer中的m(文本):
打印(m)
输出:

word
word
(nothing)
w.o.r.d.

是否存在通用方法?

您可以使用正则表达式模式
\w+(?:\.?\w+*
,以及
re.findall

text=“w.o.r.d.子单词”
matches=re.findall(r'\w+(?:\.?\w+*),text)
打印(匹配)#['w.o.r.d','subword','word']
此处使用的模式将“单词”定义为:

\w+一个或多个单词字符
(?:
\.?\w+后跟可选点和一个或多个
文字字符
)*零次或多次
根据这一定义,首字母缩略词风格的术语,如
w.o.r.d.
将被捕获为匹配项