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.
将被捕获为匹配项