Python 带句号的字中的Regexp字
我无法将字符串与regexp匹配(我对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
由/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;\)
,这可能正是您想要的