Python 3.x 使用前向正向识别单字符单词

Python 3.x 使用前向正向识别单字符单词,python-3.x,regex,Python 3.x,Regex,我正在为一个NLP项目进行数据清理任务,我的目标是统计文本中单个单词字符的出现次数。 比如说, text=' b ant' 我只需要答案是['b']。我使用正向前瞻功能来识别它 re.findall('\s(?=[a-z]\s)',text) 我的理解是;它将首先匹配一个空格,然后在regex模式中输入lookahead部分,而不在字符串中移动,定位在第一个空格处,并在字符串中查找紧跟空格的字母 但我得到的答案是;[''] 我可以得到一些关于如何获得所需输出为['b']的帮助吗。非常感谢您的

我正在为一个NLP项目进行数据清理任务,我的目标是统计文本中单个单词字符的出现次数。 比如说,

text=' b ant'
我只需要答案是['b']。我使用正向前瞻功能来识别它

re.findall('\s(?=[a-z]\s)',text)
我的理解是;它将首先匹配一个空格,然后在regex模式中输入lookahead部分,而不在字符串中移动,定位在第一个空格处,并在字符串中查找紧跟空格的字母

但我得到的答案是;['']


我可以得到一些关于如何获得所需输出为['b']的帮助吗。非常感谢您的帮助。

Lookaheads是非消费模式,所有由Lookaheads匹配的文本都不是整体匹配值的一部分

\s?=[a-z]\s模式匹配并将一个紧跟ASCII小写字母和空格的空白字符放入匹配内存缓冲区

你似乎想要

m = re.search(r'\s([^\W\d_])\s', text)
# Or, m = re.search(r'\s([A-Za-z])\s', text)
if m:
     print(m.group(1))
要获取所有事件,请执行以下操作:

re.findall(r'\s([^\W\d_])(?=\s)', text)
re.findall(r'\s([A-Za-z])(?=\s)', text)
或者,如果还需要在字符串的开头/结尾进行匹配:

re.findall(r'(?<!\S)[^\W\d_](?!\S)', text)
re.findall(r'(?<!\S)[A-Za-z](?!\S)', text)
此处有\s[^\W\d]\s个匹配项

\s-a空白字符 [^\W\d\uz]-捕获组1:任何Unicode字母[A-Za-z]都与任何ASCII字母匹配 \s-a空白字符 ? - 匹配不紧跟在非空白字符前面的位置 ?!\S-匹配不紧跟非空白字符的位置。
请参阅。

Lookaheads是非消费模式,由Lookaheads匹配的所有文本都不是整体匹配值的一部分

\s?=[a-z]\s模式匹配并将一个紧跟ASCII小写字母和空格的空白字符放入匹配内存缓冲区

你似乎想要

m = re.search(r'\s([^\W\d_])\s', text)
# Or, m = re.search(r'\s([A-Za-z])\s', text)
if m:
     print(m.group(1))
要获取所有事件,请执行以下操作:

re.findall(r'\s([^\W\d_])(?=\s)', text)
re.findall(r'\s([A-Za-z])(?=\s)', text)
或者,如果还需要在字符串的开头/结尾进行匹配:

re.findall(r'(?<!\S)[^\W\d_](?!\S)', text)
re.findall(r'(?<!\S)[A-Za-z](?!\S)', text)
此处有\s[^\W\d]\s个匹配项

\s-a空白字符 [^\W\d\uz]-捕获组1:任何Unicode字母[A-Za-z]都与任何ASCII字母匹配 \s-a空白字符 ? - 匹配不紧跟在非空白字符前面的位置 ?!\S-匹配不紧跟非空白字符的位置。
请参阅。

您不需要正则表达式来识别单词。split将为您将句子拆分为几个单词:

在[1]中:text='b ant' 在[2]中:[文本中逐字逐句。如果lenword==1,则拆分] Out[2]:['b']
你不需要正则表达式来识别单词。split将为您将句子拆分为几个单词:

在[1]中:text='b ant' 在[2]中:[文本中逐字逐句。如果lenword==1,则拆分] Out[2]:['b']
根据您的要求,您可能只想匹配正则表达式r'\b[A-Za-z]\b'。在字符串“a是到b的c,第三个字母是到d的e,我们可以忘记或f”,它将与“a”、“b”、“c”、“d”、“e”和“f”匹配,即使其中只有两个单词“b”和“d”被空格包围。连字符单词和包含撇号的单词是有问题的。根据您的要求,您可能只想匹配正则表达式r'\b[A-Za-z]\b'。在字符串“a是到b的c,第三个字母是到d的e,我们可以忘记或f”,它将与“a”、“b”、“c”、“d”、“e”和“f”匹配,即使其中只有两个单词“b”和“d”被空格包围。连字符单词和包含撇号的单词是有问题的。