ฉันจะจับคู่สตริงใน python ได้อย่างไร [ซ้ำ]

Sep 07 2020

ฉันมีดาต้าเฟรมที่มีสองวลีที่คล้ายกันเช่น 'Hello World' และ 'Hello World 1' ฉันต้องการจับคู่เฉพาะสตริง 'Hello World'

ฉันกำลังใช้: dataframe ['Phrase']. str.match ('Hello World') แต่สิ่งนี้ส่งกลับทั้งวลี 'Hello World' และ 'Hello World 1' อย่างชัดเจน มีวิธีจับคู่เฉพาะวลีเท่านั้นหรือไม่?

คำตอบ

Pitto Sep 07 2020 at 02:28

คุณสามารถใช้ RegEx เพื่อรับผลลัพธ์ดังกล่าว:

import re

phrase_to_find = 'Hello World'
phrases = ['Hello World', 'Hello World 1']

for phrase in phrases:
    if re.search(r'\b' + phrase + r'\b', phrase_to_find):
        print('Found the following match: {}'.format(phrase))

\ b แสดงขอบเขตของคำ

C.Sanchez Sep 07 2020 at 02:30

นิพจน์ทั่วไปบนสตริง

import re

...
...

if re.search(r'^Hello World$', data_frame_string):
    # Then the string matches, do whatever with the string.
    ....
    
alani Sep 07 2020 at 02:30

สิ่งที่คุณต้องมีคือทำการทดสอบความเท่าเทียมกัน:

dataframe['Phrase'] == 'Hello World'

สิ่งนี้จะส่งคืนอาร์เรย์บูลีนที่คล้ายคลึงกับกรณีการจับคู่สตริงย่อยของคุณ แต่ต้องการการจับคู่แบบตรงทั้งหมด

ตัวอย่าง:

a.csv

Phrase,Other_field
Hello World,1
Hello World 1,2
Something else,3

ดาต้าเฟรม:

>>> import pandas as pd
>>> dataframe = pd.read_csv('a.csv')

>>> dataframe
           Phrase  Other_field
0     Hello World            1
1   Hello World 1            2
2  Something else            3

สตริงย่อยของคุณตรงกัน:

>>> dataframe['Phrase'].str.match('Hello World')
0     True
1     True
2    False
Name: Phrase, dtype: bool

ตรงกันทุกประการ:

>>> dataframe['Phrase'] == 'Hello World'
0     True
1    False
2    False
Name: Phrase, dtype: bool