Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 带句号的字中的Regexp字_Python_Regex - Fatal编程技术网

Python 带句号的字中的Regexp字

Python 带句号的字中的Regexp字,python,regex,Python,Regex,我无法将字符串与regexp匹配(我对regexp没有太多经验)。我有一个字符串,每个单词后面都有一个正斜杠和一个标记。例如: 由/O Timothy/PERSON R/PERSON Geithner/PERSON领导/O/O总裁/O新组织的/O 在这些字符串中,我只对/PERSON前面的所有字符串感兴趣。下面是我提出的regexp模式: (\w)*\/PERSON 我的代码是: match = re.findall(r'(\w)*\/PERSON', string) 基本上,我在匹配/PER

我无法将字符串与regexp匹配(我对regexp没有太多经验)。我有一个字符串,每个单词后面都有一个正斜杠和一个标记。例如:

由/O Timothy/PERSON R/PERSON Geithner/PERSON领导/O/O总裁/O新组织的/O

在这些字符串中,我只对
/PERSON
前面的所有字符串感兴趣。下面是我提出的regexp模式:

(\w)*\/PERSON

我的代码是:

match = re.findall(r'(\w)*\/PERSON', string)
基本上,我在匹配
/PERSON
前面的任何单词。输出:

>>> reg
['Timothy', '', 'Geithner']
我的问题是,第二个匹配项(与
R./PERSON
的空字符串匹配)不是单词字符。我将regexp更改为:

match = re.findall(r'(\w|.*?)\/PERSON', string)
但现在的比赛是:

['led/O由/O蒂莫西,'R.,'Geithner'领导]

它是在第一个/人之前获取所有内容,其中包括由/O
引导的/O,而不仅仅是匹配
Timothy
。有人可以帮我做这个匹配,同时包括一个句号作为缩写吗?或者至少,没有空字符串匹配


谢谢,

匹配除空格字符以外的所有字符(
[^]*
)。您还需要捕获内的星号(
*
):

match = re.findall(r'([^ ]*)\/PERSON', string)
首先,
(\w |。)
匹配“一个单词字符或任何字符”(点匹配任何字符,这就是为什么要得到这些空格)

用反斜杠转义可以做到这一点:
(\w\124;\)

其次,正如@Ionut Hulub所指出的,您可能希望使用
+
而不是
*
来确保匹配某些内容,但正则表达式的工作原理是“最左,最长”,因此它将始终尝试匹配斜杠前的最长部分

如果要匹配任何非空白字符,可以使用
\S
而不是
(\w\124;\)
,这可能正是您想要的