Python 如何查找文本中匹配的单词索引?
我正在提取与中匹配的单词索引。它使用正则表达式匹配文本中所有必需的单词,但它也匹配正则表达式左边的空格。它不是在左侧文本中绑定匹配字符串,而是使用Python 如何查找文本中匹配的单词索引?,python,regex,regex-group,Python,Regex,Regex Group,我正在提取与中匹配的单词索引。它使用正则表达式匹配文本中所有必需的单词,但它也匹配正则表达式左边的空格。它不是在左侧文本中绑定匹配字符串,而是使用\b 正则表达式: (price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?) 输入文本: 这应与价格5.6 lac(包括价格5.6 lac)和560万卢比相匹配。包括卢比(即56千卢比56米)。 如果没有写入价格或rs,例如56 k或8.8 crs,它将正常
\b
正则表达式:
(price|rs)?\s*(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)
输入文本:
这应与价格5.6 lac(包括价格5.6 lac)和560万卢比相匹配。包括卢比(即56千卢比56米)。
如果没有写入价格或rs,例如56 k或8.8 crs,它将正常匹配。是正确的匹配,但它应该从左侧绑定匹配的字符串,就像它在匹配字符串结尾后不匹配的sapce一样。
它不应与此8.5 lac中8.5左边的空格匹配,也不应与其他6 lac匹配,因为5.6之前没有空格
我如何修改上面的正则表达式以将匹配的单词也绑定到左侧?
您可以将\s*
移动到可选的非捕获组中:
(?:\b(price|rs)\s*)?(\d+[\s\d.]*\s*?(pkg|k|m|(?:la(?:c|kh|k)|crore|cr)s?|l)\b\.?)
^^^^^^^^^^^^^^^^^^^^
见
(?:\b(price | rs)\s*)?
模式将匹配单词边界,后跟price
或rs
,后跟0+空格字符,整个模式将尝试一次,由于?
修饰符,该模式是可选的(整个模式序列可以匹配1或0次)谢谢@Wiktor的回答。我查一下。