Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何查找文本中匹配的单词索引?_Python_Regex_Regex Group - Fatal编程技术网

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的回答。我查一下。